git diff HEAD 和 HEAD~区别

Nei*_*ker 3 git

我正在搜索工作树和上次提交之间的差异,并在 Stackoverflow 上发现了这个已接受的答案。

有人可以解释一下 HEAD 和 HEAD~ 实际上指的是什么吗,因为答案中没有解释,我无法从谷歌中弄清楚。:)

在此输入图像描述

谢谢。

Rom*_*eri 5

首先,实际上回答最初的需求:“我正在寻找工作树和上次提交之间的差异”

你必须简单地

git diff HEAD
Run Code Online (Sandbox Code Playgroud)

HEAD对于大多数命令来说是隐含的,但diff这里有点不同,yesgit diff与 不同git diff HEAD


HEAD现在,和之间的区别HEAD~非常简单:

HEAD是 git 用来表示当前正在处理的状态的指针,通常是一个分支。(参见术语表

~表示指定提交的父提交。所以HEAD~意味着“不是最后一次提交,而是之前的一次”

有了这样一棵树:

---> time direction this way --->

A---B---C <<< master <<< HEAD
Run Code Online (Sandbox Code Playgroud)

HEAD将决心承诺C,同时HEAD~将决心B


编辑以澄清HEAD^

HEAD^两者HEAD~都指向(如果我们坚持我们的示例)B,但它不应该误导您认为它们是相同的。

<someCommit>^NN=1如果没有明确给出)是指当指定提交有多个父级时,该提交的第 N 个父级。对于经典的两个父级合并,如果HEAD指向合并提交,则可以使用HEAD^和找到父级HEAD^2

<someCommit>~N(同样,N默认为 1) 另一方面,表示所述提交的第 N 个祖先,这意味着您返回过去的 N 个提交,每次仅跟随一个父级。为了更清楚起见,在我们的示例中,HEAD~2将指定A