git diff HEAD
和git diff --staged
有什么区别?我尝试了两种方式,但输出结果相同。
git diff HEAD
和git diff --staged
有什么区别?我尝试了两种方式,但输出结果相同。
假设运行git status
命令会产生如下输出:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: y
#
# 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: x
#
正如您所见,有一个文件被修改但未准备提交,还有一个新文件已经添加到待提交区域。
git diff --staged
只会显示“待提交”区域的文件更改。
git diff HEAD
将显示所有已跟踪文件的更改。如果您已将所有更改都准备好提交,则这两个命令将输出相同的结果。
git diff
变体中。如果这个文件之前已经被添加并提交过,而你对它进行了修改,那么它将会被标记为“未暂存的更改”。 - Carlos Campderrósgit diff --staged
命令可以实现这个功能。 - Carlos Campderrósgit diff
查看暂存区和工作目录的差异git diff --staged
查看已暂存和最新提交(HEAD)的差异git diff HEAD
查看最新提交(HEAD)与工作目录的差异HEAD
表示当前检出分支上最近一次提交的版本。maint
是分支的名称吗? - variable在即将到来的Git 2.3.4+(2015年第二季度)中,您将更容易地看到两个差异之间的区别git status -v -v
请参见提交4055500,作者为Michael J Gruber mjg
,它很好地解释了git diff HEAD
和git diff --staged
之间的区别:
commit
/status
: 显示使用-v -v
的索引-工作树差异
git commit
和git status
以长格式显示 HEAD 和索引之间的差异,当给定-v
时。这允许预览要进行的提交。它们还列出了具有未暂存更改但没有差异的已跟踪文件。
引入 '
-v -v
',它除了显示HEAD
索引差异外,还显示索引和工作树之间的差异。这允许审查未暂存的更改,这些更改可能在提交中缺失。在 '
-v -v
' 的情况下,会添加额外的标题行。
Changes to be committed:
# and
Changes not staged for commit:
-
"引导,以使其更加突出。另一个边缘情况的区别:在一个新创建的Git仓库中,只运行了git init
命令,这时运行git diff HEAD
将会导致致命错误(模棱两可的参数'HEAD'),而git diff --staged
则不会有任何输出。
--staged
是--cached
的同义词。这篇文章中的图表(https://dev59.com/yHI-5IYBdhLWcg3w99oH)解释了它们之间的区别。已标记为重复。 - Abizerngit status -v -v
将清楚地显示两个差异之间的区别:请参见我的答案。 - VonC