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^回退版本,即可保证工作区,暂存区,版本库都是上次的内容。

 

posted @ 2022-08-20 17:56  lypbendlf  阅读(241)  评论(0编辑  收藏  举报