Git三大分区学习
转自:https://juejin.cn/post/6844903654311510030
1.工作区、暂存区、版本库
- 工作区(Working Directory) 是直接编辑的地方,直接操作。
- 暂存区(Stage 或 Index) 数据暂时存放的区域。
- 版本库(commit History) 存放已经提交的数据,push 的时候,就是把这个区的数据 push 到远程git仓库了。
git add
命令会将工作区的修改添加到暂存区
中,git commit
执行时,会提交暂存区
的内容到版本库中。
2.查看对比
git diff 工作区 vs 暂存区 git diff head 工作区 vs 版本库 git diff –-cached 暂存区 vs 版本库
一开始,三个分区是一致的,在工作区修改文件后,另外两个保持一致;在add后,工作区和暂存区一致;commit后,三区一致。
通过git diff命令查看某一文件的修改内容:
myproj % git diff a.txt
diff --git a/a.txt b/a.txt index f658172..fc7bd6a 100644 --- a/a.txt +++ b/a.txt @@ -1,3 +1,3 @@ testA testB -添加注释修改文件 \ No newline at end of file +0820 bg修改一下
输出内容详解:https://developer.aliyun.com/article/658560
- diff --git a/a.txt b/a.txt :
a/a.txt
代表源文件,也就是修改前的文件,b/a.txt
代表比目标文件,也就是修改后的文件; - index f658172..fc7bd6a 100644: 表是文件哈希值。
- 第三四行:---代表源文件,+++代表目标文件;
- 第五行:差异小结,
@@ -1,3 +1,3 @@
,分为两个部分,第一个是-1,3,-表示源文件,1,2表示从第一行开始的第3行,后面的+1,3,则表示目标文件的第一行开始的第三行内容。差异小结可能会有多个。 - 剩下的行都是具体的差异信息,其中以空格开头的行代表源文件与目标文件没有差异,以-开头 的行代表在源文件的基础上删除,以+开头代表在源文件基础上添加;
git add .后,
myproj % git add . myproj % git diff //无内容输出 myproj % git diff head //查看工作区和版本库的区别 diff --git a/a.txt b/a.txt index f658172..fc7bd6a 100644 --- a/a.txt +++ b/a.txt @@ -1,3 +1,3 @@ testA testB -添加注释修改文件 \ No newline at end of file +0820 bg修改一下
myproj % git diff –-cached //查看暂存区和版本库的区别,有问题。 fatal: 有歧义的参数 '–-cached':未知的版本或路径不存在于工作区中。 使用 '--' 来分隔版本和路径,例如: 'git <命令> [<版本>...] -- [<文件>...]'
commit之后第三个命令仍是有问题,不知道为什么。
3.三个区的回退关系
https://www.liaoxuefeng.com/wiki/896043488029600/897889638509536
情况1:在工作区做了修改,并未添加到暂存区,想撤销工作区的修改,用 git restore file;
情况2:在工作区做了修改,并用git add 添加到了暂存区,未提交;想撤销,分两步,1.先撤销暂存区的修改,用 git restore --staged file, 2.然后参考情况1撤销工作区的修改;
情况3:在工作区做了修改,且git add git commit添加并提交了内容,想撤销本次提交,直接用 git reset --hard HEAD^回退版本,即可保证工作区,暂存区,版本库都是上次的内容。