实际上,git diff 是在索引和工作树之间进行比较。只有当你使用git add将更改添加到索引中时,它的内容才与HEAD提交相同。 git diff HEAD 则是在仓库和工作树之间进行比较。 请参见365git.tumblr.com post:
git diff - 比较工作区与暂存区之间的差异。 git diff --staged - 比较暂存区与版本库之间的差异。 git diff HEAD - 比较工作区与版本库之间的差异。 为了说明这一点,我将一个文件更改为“Name Staged”并添加到暂存区(git add .),然后再次更改该文件,现在我将文本替换为“Name Working Area”,然后运行以下命令: 现在你可以清楚地看到它是如何工作的。很酷吧?
受@VonC的采纳答案启发,您可以使用以下方式替代git diff HEAD:git difftool --dir-diff --no-prompt HEAD 这将打开一个目录差异,显示你的工作目录和repo之间的差异。从那里开始查看单个文件的更改非常容易(例如使用类似Beyond Compare带有选项卡UI的工具)。
git diff
的目标是默认显示尚未被跟踪(添加到索引或提交)的内容。您已经将其添加到索引中,因此默认情况下不再显示它,因为您已经审查过并决定将其作为下一次提交的一部分。 - VonC文件(索引与存储库不同,并且
git diff`仅会显示未添加到索引的文件或文件部分)。然后您提交,索引再次等于存储库。 - VonC