使用gitrev-parse<tag>错误提交哈希

我现在对 git 有一些奇怪的行为。

我有一个标记了提交的代码库 v2.3.0

如果我运行git log,我可以看到我最新的提交哈希是:

commit b2ee576083607b7ba451b72642a77ca3309e4ac9 (HEAD, tag: v2.3.0, origin/staging, origin/master, origin/develop, origin/HEAD, master)
Author: B <b@b.com>
Date:   Thu Apr 1 16:53:48 2021 +0000

凉爽的!这也与我在 git repo 中看到的一致

如果我运行git checkout v2.3.0,我也会得到相同的提交哈希。甜的。

但是,如果我运行git rev-parse v2.3.0,要查看哪个提交哈希与我的标签对齐,我会得到提交哈希85607530aa64da4df34e7160d073df5c2699439b......?

如果我然后尝试检查该提交哈希,我的代码库仍然会说它在b2ee576083607b7ba451b72642a77ca3309e4ac9(即它没有改变)

所以据我所知,我有这个奇怪的幻像提交哈希,它在我的 git 存储库中找不到,但它似乎指向我的实际提交哈希。这给我带来了问题,因为我有一个依赖于 git rev-parse 正确输出的脚本。

我有 git 版本 git version 2.25.1

有人知道这里发生了什么吗?

回答

那不是提交哈希。那是带注释的标签的哈希 ID , v2.3.0。带注释的标签本身就是对象,因此它们有自己的哈希 ID。与名称(例如分支和标签名称)一样,它们又指向其他对象——通常直接指向提交。

要将git rev-parse任何标记转换为它可能指向的最终对象,请使用^{}后缀,这意味着如果这是一个标记对象,则跟随它到其目的地,如果是另一个标记,则继续跟随。如果您提供的名称可以指向提交对象以外的其他内容(例如,指向树或 blob 对象),并且您想确保它确实指向提交,请使用^{commit}后缀:

git rev-parse v2.3.0^{commit}

如果标记指向提交以外的任何内容,这将产生错误(非零退出状态),因此请检查该错误。


以上是使用gitrev-parse&lt;tag&gt;错误提交哈希的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>