为什么“git cat-file -p HEAD ^ 2”失败了?

时间:2015-09-27 18:38:23

标签: git revision

“git cat-file -p HEAD ^ 2”给出了以下错误:

1

但是,使用“〜”格式,它可以工作:

fatal: Not a valid object name HEAD^2

gitrevision man page说以下内容:

  

...修订参数的后缀^表示   该提交对象的第一个父对象。 rev ^ n表示第n个父级   (即rev ^相当于rev ^ 1)

我误解了什么?

1 个答案:

答案 0 :(得分:2)

您在Windows上有类似的错误消息(在CMD会话中,而不是在git-bash会话中)。
您需要使用^转义^

git cat-file -p HEAD^^2

但是,除非HEAD有两个父母(意思是合并的结果),否则这将不起作用,这似乎就是这种情况。

例如:

C:\Users\vonc\prog\git\git>gl
*   74a844a - (HEAD -> master) Merge branch 'rj/mailmap-ramsay' (6 days ago) <Junio C Hamano>
|\
| * dafc047 - mailmap: update my entry with new email address (11 days ago) <Ramsay Jones>
* |   b6bd2d0 - Merge branch 'bn/send-email-smtp-auth-error-message-fix' (6 days ago) <Junio C Hamano>

这给出了:

C:\Users\vonc\prog\git\git>git cat-file -p @^2
fatal: Not a valid object name @2

C:\Users\vonc\prog\git\git>git cat-file -p @^^2
tree c78343c7a98b4cb8a455d73aeecaa8acfa2cb30e
parent f4d9753a89bf04011c00e943d85211906e86a0f6
author Ramsay Jones <ramsay@ramsayjones.plus.com> 1441122606 +0100
committer Junio C Hamano <gitster@pobox.com> 1442419728 -0700

由于您的错误消息是Not a valid object name HEAD^2,而不是Not a valid object name @2,这意味着HEAD只有一个父级。

  

HEAD~2“对我有用。”HEAD ^ n“不等于”HEAD~n“吗?

没有

  

HEAD~HEAD^是等效的   指定数字时,差异会变得明显   HEAD~2表示“第一个父母的第一个父母”或“祖父母”

X--x--x
     /
    Y

@~2X,而@^2Y