HOME
NAVIGATION

探索Git(3)——git diff、git diff --cached和git diff HEAD的区别

☞探索git的合集

0.git diff、git diff --cached和git diff HEAD的区别

然后突然对git diff 、git diff HEAD的区别有些疑惑,我就找到了这三行字(顺便搜到了git diff --cached)

  • git diff #是工作区(work dict)和暂存区(stage)的比较
  • git diff --cached #是暂存区(stage)和分支(master)的比较
  • git diff HEAD #查看工作区和版本库里面最新版本的区别

为了更加理解这三个命令,我现在新增一个inStage.docx

目前工作区有一个有三行代码最后一行是do,并且do还没有提交到暂存区的test.docx, 一个在最新版本库中的example.docx和一个我现在把他提交到暂存区的inStage.docx 然后我尝试一下git diff和git diff HEAD

我认为的目前情况(所以说这一定是个flag):

  • 工作区:最新版本的test,example和inStage
  • 暂存区:inStage
  • 版本库:只有两行文字(并非最新版本)的test,最新版本的example

git diff

$ git diff
diff --git a/test.docx b/test.docx
index 52c8306..f7134b2 100644
--- a/test.docx
+++ b/test.docx
@@ -1,2 +1,3 @@
new
add
+do


因为工作区现在有三个文件,注意!!!
把工作区的文件提交到暂存区,是不会让工作区的文件不见的!他们还在!

但是情况还是有点不对啊,工作区和暂存区应该还有个example.docx的差别,因为example.docx已经被提交到版本库了,stage中没有这个文档,而工作区有。 然后我突然察觉到可能是我对暂存区提交文件到版本库的过程有些误解,但是顾虑到这个测试的完整性,我决定先继续看下一个命令行

git diff HEAD

$ git diff HEAD//查看工作区和版本库里面最新版本的区别
diff --git a/inStage.docx b/inStage.docx
new file mode 100644
index 0000000..1e9ef0c
--- /dev/null
+++ b/inStage.docx
@@ -0,0 +1 @@
+in stage
diff --git a/test.docx b/test.docx
index 52c8306..f7134b2 100644
--- a/test.docx
+++ b/test.docx
@@ -1,2 +1,3 @@
new
add
+do

这个就非常合理!

然后我仔细思考了一下之前的残留问题,个人认为可能暂存区的内容commit提交到版本库,只是多了一个指针, 而并没有确实删除暂存区的内容,所以比较工作区和暂存区时,才没有已经提交掉的example.docx的区别。 所以之前那篇文章中的第三张图,在commit把暂存区的文档提交到版本库时,stage区,不应该是空白的, 而应该是多了一个版本库指向相应文档的指针。