我无法理解git网站链接的书中对git diff
命令的解释。
根据Pro Git Book的说法,
该命令(
git diff
)将工作目录中的内容与暂存区中的内容进行比较。
。
在使用git时,似乎git diff
将您的工作目录与您的存储库进行了比较。
我有一个已提交到仓库的文件。我现在修改此文件。如果不进行暂存,则运行git status会向我显示未暂存的更改下的文件。现在,如果我运行git diff
,我将得到回购中的内容和工作目录中的内容之间的代码差异。由于修改后的文件甚至都没有上演,我不应该没有输出吗?
我对作者试图传达的内容有误吗?
答案 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 }}更改,无论更改是暂存还是未暂存,它都只会在文件中查找更改。
希望这会有所帮助。