获取标记的提交哈希

时间:2013-05-29 15:27:33

标签: git

它与Making git show to show information in a machine parseable format有关,但我厌倦了现在我必须进行大量解析才能获得提交哈希的事实。

有人可以给我一个命令,打印给定git标签的提交哈希(以及只提交哈希)标签吗?我希望

git show mylabel --pretty=format:"%H" --quiet 

只是打印我的承诺#但它说

tag mylabel
Tagger: user <user@x.com>

Some comment

446a52cb4aff90d0626b8232aba8c40235c16245

我期待只有提交行的一行输出,但我现在必须解析最后一行?

5 个答案:

答案 0 :(得分:14)

git log -1 --format=format:"%H" mylabel

怎么样?

编辑:

实际上更好的解决方案是:

git show-ref -s mylabel

EDIT bis:正如评论中所提到的,注意提交注释的提交(它们是自己的对象)。要获得更通用的解决方案,请阅读@michas answer。

执行git show-ref -d mylabel时,您可以看到区别。


<强>资源:

答案 1 :(得分:10)

git help rev-parse说:

   <rev>^{}, e.g. v0.99.8^{}
       A suffix ^ followed by an empty brace pair means the object could be a tag, and dereference the tag recursively until a non-tag object is found.

通常,您使用tag^{}来引用该提交。

您有两种不同的标签:

  • 轻量级标签只是指向现有提交的指针
  • 带注释的标签是其自身的对象,其中包含指向单独提交对象的指针

使用git rev-parse tag获取标签本身的SHA1。

使用git rev-parse tag^{}获取底层提交的SHA1。

对于轻量级标签,两者都是相同的。对于带注释的标签,它们不是。

您还可以使用git show-ref -d tag,它将显示标记的SHA1和关联提交的SHA1。

还有git show tag为您提供有关(带注释的)标记的详细信息。

答案 2 :(得分:4)

git rev-parse mylabel^{}应该做你想做的事。有关^{}和其他运营商的详细信息,请参阅man gitrevisions

答案 3 :(得分:0)

只是一个猜测:尝试“git show --pretty = format:”%H“--quiet mylabel”

答案 4 :(得分:0)

git log <tag or branch> -1 --pretty=%H

-1:告诉它只打印1次提交

--pretty=%H:告诉它只打印完整哈希