Git diff命令文档

时间:2019-07-01 07:54:52

标签: git git-diff

我无法理解git网站链接的书中对git diff命令的解释。

根据Pro Git Book的说法,

  

该命令(git diff)将工作目录中的内容与暂存区中的内容进行比较。

在使用git时,似乎git diff将您的工作目录与您的存储库进行了比较。 我有一个已提交到仓库的文件。我现在修改此文件。如果不进行暂存,则运行git status会向我显示未暂存的更改下的文件。现在,如果我运行git diff,我将得到回购中的内容和工作目录中的内容之间的代码差异。由于修改后的文件甚至都没有上演,我不应该没有输出吗?

我对作者试图传达的内容有误吗?

1 个答案:

答案 0 :(得分:1)

  • git diff查看阶段目录和工作目录之间的差异
  • git diff --staged查看HEAD和Stage之间的差异
  • git diff HEAD查看HEAD和工作目录之间的区别

Stage是您已标记为包含在下一次提交中的更改。

Working Directory是您正在处理并进行更改的当前目录。

HEAD是对当前已检出分支中最后一次提交的引用。

尝试一次,可能有助于您清除问题:

假设我有一个文件test.txt,并且我的存储库中当前有一个文件Hello。现在,我更改文件并添加World并执行git status

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   test.txt

当我选中git diff时,它将显示如下内容:

--- a/test.txt
+++ b/test.txt
@@ -1 +1 @@
-Hello
+Hello World

现在,如果我暂存此文件并检查git status

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   test.txt

现在我观察到我忘了在文本中添加感叹号,所以我添加了感叹号并再次检查git status

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   test.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   test.txt

因此您可以看到我们在暂存区和未暂存区中都有相同的文件。当我检查git diff时,会看到以下信息:

--- a/test.txt
+++ b/test.txt
@@ -1 +1 @@
-Hello World
+Hello World!

我们已将暂定区域中的Hello World更改为Hello World!,因此与暂存区域相比。现在,如果我检查git diff --staged

--- a/test.txt
+++ b/test.txt
@@ -1 +1 @@
-Hello
+Hello World

这会将staged的更改与HEAD(最后的提交)进行比较。由于我尚未上演!更改,因此此处未显示。最后,当我执行git diff HEAD时,它将显示以下内容:

--- a/test.txt
+++ b/test.txt
@@ -1 +1 @@
-Hello
+Hello World!

HEAD(最后一次提交)和您的Working Directory之间的变化。由于HEAD在文件中和您的Hello中只有Working Directory,因此您已将其更改为Hello World!(没有上演{{1 }}更改,无论更改是暂存还是未暂存,它都只会在文件中查找更改。

希望这会有所帮助。