“git cat-file -p HEAD ^ 2”给出了以下错误:
1
但是,使用“〜”格式,它可以工作:
fatal: Not a valid object name HEAD^2
gitrevision man page说以下内容:
...修订参数的后缀^表示 该提交对象的第一个父对象。 rev ^ n表示第n个父级 (即rev ^相当于rev ^ 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
@~2
为X
,而@^2
为Y
。