Git的基础操作

环境:Linux操作系统-Centos

创建本地仓库

首先创建一个目录,命名为:gitcode

mkdir gitcode

进入gitcode目录,创建本地仓库

git init

此时,就会创建出了一个空的仓库在当前目录下了,此时目录下就有git的目录了

配置Git

首先重要的是需要配置我们创建出来的仓库的名称Email

git config [--global] user.name "Your Name"
git config [--global] user.email "email@example.com"
# 把 Your Name 改成你的昵称
# 把 email@example.com 改成邮箱的格式,只要格式正确即可

其中--global 是⼀个可选项。如果使用了该选项,表示这台机器上所有的Git仓库都会使用这个
配置。如果你希望在不同仓库中使用不同的name或 e-mail ,可以不要--global 选项,但要
注意的是,执行命令时必须要在仓库里。

配置完后,可以使用以下命令来查看配置项

git config -l

当想要删除name和email时:

git config [--global] --unset user.name
git config [--global] --unset user.email

Git中的工作区、暂存区、版本库

工作区:是在电脑上你要写代码或文件的目录。
暂存区:英文叫stage或index。⼀般存放在 .git 目录下的index文件(.git/index)中,我们
把暂存区有时也叫作索引(index)。

版本库:又名仓库,英文名 repository 。⼯作区有⼀个隐藏目录 .git ,它不算⼯作区,而
是Git的版本库。这个版本库里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

首先在当前目录("gitcode")下创建出一个新的文件:"ReadMe",注意此时的git并不能直接管理“ReadMe”文件。

此时,.git就是版本库,用于管理指定的文件,而处于gitcode的文件就是工作区了,而暂存区其实是存在于版本库中的。

当需要管理的文件,从工作区到版本库中被管理起来,简单的流程是:工作区的内容在被修改(增删改操作)后, 使用add,会在版本库中的一个叫objects的对象库中保存(每一次add就每次创建出一个新的对象,对应着每一个版本),此时在暂存区会通过索引,从对象库(objects)中找到对应的版本,然后使用commit(提交)到master中,也是通过索引。此时就被git管理起来了。

添加文件

使用 git add 来添加文件到暂存区中:

对于git来说,可以添加一个或多个文件到暂存区:

git add [file1] [file2] ...

也可以将当前目录下所有文件添加到暂存区:

git add .

随后使用 git commit 来添加到master中:

git commit也可以同时提交多个文件到仓库中:

git commit [file1] [file2] ... -m "message"

提交文件后,我们可以使用 git log 来查看提交的历史:

加上参数:--pretty=oneline ,可以简化历史内容:

查看 .git 文件

首先查看一下 .git 的目录结构:

可以看到,在 .git 的目录中,存在着index索引(暂存区)和objects对象库,还有HEAD(默认指向master分支的指针)。

查看一下masert的内容:

会看到一串长长的数据,这段数据就是最新提交的commit id。

通过命令: git cat-file -p commit id,就可以查看对应的版本库对象的内容:

在内容中,出现了一行:tree 0e6b........945的数据,使用同样的方法查看:

发现出现了历史修改过的版本文件等等,再次查看对应的commit id

就会发现,我们可以查看历史版本了!!!历史修改过的版本,被git记录下来了。

总结:在 .git 的目录下,我们可以查看到暂存区和Head,对Head指向的master进行查看,可以找到最新保存的commit id,查看这个commit id可以找到以往文件的保存的commit id,通过这些id,可以查看到历史修改过的版本。

继续添加文件

带着对上述的工作区、暂存区和版本库的理解,继续添加文件:

创建出file1,然后add添加file1,然后继续创建fiel2,接着直接commit提交:

可以看到,虽然有两个新的在工作区的文件,但是因为只将 file1 add 到了暂存区中,因此在提交commit的时候,也只会提交file1,即"1 file changed"。

修改文件

Git追踪管理的是修改的内容,而不是整个文件!接下来对“ReadMe”文件再次修改:

由于已经将”ReadMe“提交到了仓库中,而仓库中的ReadMe和我们工作区的ReadMe是不同的,因此先来查看一下当前仓库状态:git status

  • Changes not staged for commit:暂存区是干净的,没有内容
  • modified:   ReadMe  意思是被修改的文件是ReadMe.

通过查看了仓库状态,得知哪些文件内容被修改了,接下来是查看一下被修改前后的差别:

git diff [file] 命令用来显示暂存区和工作区文件的差异,显示的格式正是Unix通用的diff格式。也可以使用 git diff HEAD -- [file] 命令来查看版本库和工作区文件的区别:

  • diff --git a/ReadMe b/ReadMe:意思是  a表示修改前的内容,b表示的是修改的内容。
  • --- a/ReadMe      +++ b/ReadMe   意思是 ---也表示修改前,+++修改后。
  • @@ -1 +1,5 @@   意思是  -1表示改动前的第一行,+1表示改动后的第一行,5表示从+1开始改动到第五行结束。

查看到修改前后的变化,确认无误,可以放心提交了!

[wjmhlh@VM-12-9-centos gitcode]$ git commit -m "modified ReadMe"
[master 891d516] modified ReadMe
 1 file changed, 5 insertions(+), 1 deletion(-)

提交后,查看仓库状态:

[wjmhlh@VM-12-9-centos gitcode]$ git status
# On branch master
nothing to commit, working directory clean

版本回退

执行 git reset 命令用于回退版本,可以指定退回某⼀次提交的版本。要解释⼀下“回退”本质是要将版本库中的内容进行回退,⼯作区或暂存区是否回退由命令参数决定:

git reset [--soft | --mixed | --hard] [HEAD]

--mixed 为默认选项,使用时可以不用带该参数。该参数将暂存区的内容退回为指定提交版本内容工作区文件保持不变。
 --soft 参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本
 --hard 参数将暂存区与工作区都退回到指定版本。切记⼯作区有未提交的代码时不要用这个命令,因为⼯作区会回滚,你没有提交的代码就再也找不回了,所以使⽤该参数前⼀定要慎重

HEAD 说明:
◦ 可直接写成commitid,表示指定退回的版本
◦ HEAD表示当前版本
◦ HEAD^上⼀个版本
◦ HEAD^^上上⼀个版本
◦ 以此类推...


• 可以使用〜数字表示:
◦ HEAD~0表示当前版本
◦ HEAD~1上⼀个版本
◦ HEAD^2上上⼀个版本
◦ 以此类推

另外:对于git reset中的版本回退,如果版本库是空的,那么在回退到版本库一致的时候,暂存区和工作区会变为空。

查看历史提交记录:git log --pretty=oneline

撤销修改

情况一:对于工作区的代码,还没有add

git checkout -- [file] 命令让工作区的⽂件回到最近⼀次 add 或 commit 时的状态

撤销前:

撤销后:

情况二:已经add,但是没用有commit

将文件内容修改后,add一下,通过git status查看,是否存在暂存区。

首先,因为没用commit,因此版本库中是空的,因此,可以使用git reset回退到当前版本的内容,因此这会导致暂存区变成空的了。这样就会回到第一种情况。

情况三:add后,commit了

首先,更新文件ReadMe内容:

接着,将其add和commit:

此时的情况就是,版本库中,最新的版本就是有XXX code的ReadMe,而上一个版本是没有的。

使用git reset --hard HEAD^,就能将工作区、暂存区和版本库回退到上个版本。不过这个操作是有条件的,就是你还没有把⾃⼰的本地版本库推送到远程,也就是没有push操作!

 删除操作

如果想要删除git管理的文件,使用rm命令是不行的。

首先创建了个文件,将其add和commit

想要删除file1,有两个方法:

第一种方法:①先使用rm删除file1 ②使用git add file1,将工作区的变动提交。③git commit -m "" 进行提交。

第二种方法:①使用git rm file1进行删除,此时是在暂时区删除的。

②最后提交一下,即可删除。

简单总结

①在git结构中,分有工作区、暂存区和版本库。

②添加文件:git add file--将一个或多个文件添加到暂存区中。git commit -m "XXX" 将文件添加到版本库中。使用git log或者git log --pretty=oneline查看提交历史

git reset 命令用于回退版本。git checkout -- [file] 命令让工作区的⽂件回到最近⼀次 add 或 commit 时的状态

④使用git rm file进行删除,最后commit提交。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/802467.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

科技出海|百分点科技智慧政务解决方案亮相非洲展会

近日,华为非洲全联接大会在南非约翰内斯堡举办,吸引政府官员行业专家、思想领袖、生态伙伴等2,000多人参会,百分点科技作为华为云生态合作伙伴,重点展示了智慧政务解决方案,发表《Enable a Smarter Government with Da…

which 命令在Linux中是一个快速查找可执行文件位置的工具

文章目录 0、概念1、which --help2、which命令解释 0、概念 which命令用于查找命令的可执行文件的路径which 命令在 Linux 中用于查找可执行命令的完整路径。当你在 shell 中输入一个命令时,shell 会在环境变量 $PATH 定义的目录列表中查找这个命令。which 命令可以…

【Neural signal processing and analysis zero to hero】- 1

The basics of neural signal processing course from youtube: 传送地址 Possible preprocessing steps Signal artifacts (not) to worry about doing visual based artifact rejection so that means that before you start analyzing, you can identify those data epic…

SQL Server Query Store Settings (查询存储设置)

参考:Query Store Settings - Erin Stellato 在 SQL Server 2017 中,有九 (9) 个设置与查询存储相关。虽然这些设置记录在sys.database_query_store_options中,但我经常被问到每个设置的值“应该”是多少。我在下面列出了每个设置&am…

[Vulnhub] devt-improved slog_users+vim权限提升+nano权限提升+passwd权限提升+Lxc逃逸权限提升

信息收集 IP AddressOpening Ports192.168.101.149TCP:22,113,139,445,8080 $ nmap -p- 192.168.101.149 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | …

【GPT4充值】WildCard虚拟卡

绑定流程 官网:WildCard | 一分钟注册,轻松订阅海外软件服务 1、使用手机号验证码注册、可以使用zfb快捷认证 2、填写身份信息后,然后根据流程验证即可。 3、选择卡片使用期限,填入邀请码【PEACEFUL】可立减$2。 4、打开openAI开发…

leetcode热题100.分割等和子集(动态规划)

分割等和子集 Problem: 416. 分割等和子集 思路 我选择使用动态规划的方法来解题。我们需要判断是否可以将数组分割成两个子集,使得这两个子集的和相等。这个问题可以转化为在数组中找到一个子集,使得其和等于数组总和的一半。 解题过程 首先&#xf…

卷积神经网络-猫狗识别实战

课程来自bilibiliMomodel平台 全长只有两个小时,理论部分讲得很粗糙 1 人的视觉和计算机视觉 人的大脑:神经元细胞,轴突发送信号,树突接收信号,互相连接,连接的强度和状态会随着新的经历刺激而变化。 用…

GitHub+Picgo图片上传

Picgo下载,修改安装路径,其他一路下一步! 地址 注册GitHub,注册过程不详细展开,不会的百度一下 地址 新建GitHub仓库存放图片 ——————————————————————————————————————————…

【贪心算法】贪心算法30题

一、贪心算法简介 证明贪心策略正确性的常用方法:直接证明、交换论证法、反证法、分类讨论… 二、相关编程题 2.1 柠檬水找零 题目链接 860. 柠檬水找零 - 力扣(LeetCode) 题目描述 算法原理 提示:最优解和贪心解唯一可能不同…

Java IO流(详解)

目录 1.概述 2.File文件类 2.1 文件的创建操作 2.2 文件的查找操作 3. File里面一些其他方法 3.1 经典案例 4. IO流 4.1 概念 4.2 IO分类 4.3 字节输出流 4.4 字节输入流 4.5 案例 4.6 字符输出流 4.7 字符输入流 4.8 案例 4.9 处理流--缓冲流 4.10 对象流: 1.…

IP地址定位与智慧城市和智能交通

智慧城市和智能交通是现代城市发展的关键领域,通过先进技术提升城市管理和居民生活质量。IP地址定位在交通监控、智能路灯管理等方面发挥了重要作用,本文将深入探讨其技术实现及应用。 交通监控与优化 通过IP地址连接交通传感器和摄像头,可…

useState函数

seState是一个react Hook(函数),它允许我们像组件添加一个状态变量,从而控制影响组件的渲染结果 数据驱动试图 本质:和普通JS变量不同的是,状态变量一旦发生变化组件的视图UI也会随着变化(数据驱动试图) 使用 修改状态 注意&am…

H5 Svg 半圆圆环占比图

效果图 主逻辑 /* 虚线长度 */ stroke-dasharray /* 偏移 */ stroke-dashoffset 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&qu…

基于jeecgboot-vue3的Flowable流程支持bpmn流程设计器与仿钉钉流程设计器-编辑多版本处理

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、前端编辑带有仿钉钉流程的处理 /** 编辑流程设计弹窗页面 */const handleLoadXml (row) > {console.log("handleLoadXml row",row)const params {flowKey: row.key,ver…

React@16.x(60)Redux@4.x(9)- 实现 applyMiddleware

目录 1&#xff0c;applyMiddleware 原理2&#xff0c;实现2.1&#xff0c;applyMiddleware2.1.1&#xff0c;compose 方法2.1.2&#xff0c;applyMiddleware 2.2&#xff0c;修改 createStore 接上篇文章&#xff1a;Redux中间件介绍。 1&#xff0c;applyMiddleware 原理 R…

数据融合工具(10)线重叠检查修复

一、需求背景 先明确一下“线重叠”的定义。 ArcGIS拓扑工具集中的拓扑规则&#xff1a; 不能自重叠&#xff08;线&#xff09; —线要素不得与自身重叠。这些线要素可以交叉或接触但不得有重合的线段。此规则适用于街道等线段可能接触闭合线的要素&#xff0c;但同一街道不得…

深入探讨极限编程(XP):技术实践与频繁发布的艺术

目录 前言1. 极限编程的核心原则1.1 沟通1.2 简单1.3 反馈1.4 勇气1.5 尊重 2. 关键实践2.1 结对编程2.1.1 提高代码质量2.1.2 促进知识共享2.1.3 增强团队协作 2.2 测试驱动开发&#xff08;TDD&#xff09;2.2.1 提升代码可靠性2.2.2 提高代码可维护性2.2.3 鼓励良好设计 2.3…

判断点与圆的位置关系(c++)

可以通过创建两个类来解决问题 &#xff1a; 代码&#xff1a; #include<iostream> using namespace std;class Point { public:void setX(int x){m_X x;}int getX(){return m_X;}void setY(int y){m_Y y;}int getY(){return m_Y;}private:int m_X;int m_Y;};class C…

【系统架构设计师】十一、系统架构设计(中间件|典型应用架构)

目录 九、中间件 9.1 基础概念 9.2 中间件分类 十、典型应用架构 10.1 J2EE和四层结构 10.2 JSPServletJavaBeanDAO 10.3 .NET和J2EE之争 往期推荐 历年真题练习 九、中间件 之前总提到中间件&#xff0c;那么中间件到底是什么&#xff1f;在系统架构中又扮演者什么角…