首先,实际回答最初的需求:“我正在寻找如何在工作目录和上次提交之间进行差异比较”
您只需要
git diff HEAD
(对大多数命令,HEAD
都是默认的,但diff
略有不同,是的git diff
和git diff HEAD
是不同的)
现在,HEAD
和HEAD~
之间的区别非常简单:
HEAD
是Git用来表示当前正在操作的状态的指针,通常是一个分支。(见词汇表)
~
表示被指定提交的父提交。因此,HEAD~
的意思是“不是最后一次提交,而是前一个提交”
有这样的树形结构:
---> time direction this way --->
A---B---C <<< master <<< HEAD
HEAD
会指向提交 C
,而 HEAD~
则会指向 B
编辑以澄清关于 HEAD^
HEAD^
和 HEAD~
都指向(如果我们按照示例)B
,但这不应让你误认为它们是相同的。
<someCommit>^N
(其中如果未明确给出,则 N=1
)表示当指定的提交有多个父项时该提交的第 N 个父项。对于经典的两个父项合并,如果 HEAD
指向合并提交,则可以通过 HEAD^
和 HEAD^2
找到父项。
<someCommit>~N
(同样,默认为 N=1
),则意味着所述提交的第 N 个祖先,即在过去回溯 N 次,每次仅跟随一个父项。为了更好地说明,在我们的示例中,HEAD~2
将指代 A
HEAD^
的部分。 - Romain Valeri