git - 为什么 "git cat-file -p HEAD^2"失败?

标签 git revision

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

fatal: Not a valid object name HEAD^2

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

$ git cat-file -p HEAD~2

gitrevision man page说如下:

... A suffix ^ to a revision parameter means the first parent of that commit object. rev^n means the nth parent (i.e. rev^ is equivalent to rev^1)

我误解了什么?

最佳答案

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

git cat-file -p HEAD^^2

但是除非 HEAD 有两个父级(意思是 merge 的结果),否则这是行不通的,这里似乎就是这种情况。

例如:

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 <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9ceefdf1effde5dceefdf1effde5f6f3f2f9efb2ecf0e9efb2fff3f1" rel="noreferrer noopener nofollow">[email protected]</a>> 1441122606 +0100
committer Junio C Hamano <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1d7a74696e69786f5d6d727f7265337e7270" rel="noreferrer noopener nofollow">[email protected]</a>> 1442419728 -0700

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


HEAD~2" works for me. Isn't "HEAD^n" equivalent to "HEAD~n"?

否:

HEAD~ and HEAD^ are equivalent.
The difference becomes apparent when you specify a number.
HEAD~2 means “the first parent of the first parent,” or “the grandparent”

X--x--x
     /
    Y

@~2X,而 @^2Y

关于git - 为什么 "git cat-file -p HEAD^2"失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32811472/

相关文章:

git - 请用 Git 解释 Tim Pope 的 Effortless Ctags

git - GitHub 中未经验证的提交

perforce - Perforce无法正确同步文件

database - 帖子的版本控制如何在 WordPress 数据库中工作

git - 我怎样才能使这个 git 命令别名?

svn - Git SVN 和外部

git - 如何覆盖 fetch 冲突,这样如果 git 找到相同的确切文件,它不会产生冲突?

svn - 通过删除的文本查找svn修订版

git - 使用 git 识别修订中所有修改的函数

git - Redmine:相关修订不更新非主分支