21

它与让 git show 以机器可解析的格式显示信息有关,但我厌倦了我现在必须进行大量解析才能获得提交哈希的事实。

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

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

只会打印我的提交 # 但它说

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

Some comment

446a52cb4aff90d0626b8232aba8c40235c16245

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

4

5 回答 5

26

关于什么git log -1 --format=format:"%H" mylabel

编辑:

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

git show-ref -s mylabel

警告这仅适用于未注释的标签有关更通用和更安全的命令,请参阅https://stackoverflow.com/a/1862542/1586965

编辑之二:如评论中所述,注意带注释的提交(它们是它们自己的对象)。要获得更通用的解决方案,请阅读@michas 答案。

当您执行git show-ref -d mylabel.


资源:

于 2013-05-29T15:31:57.510 回答
19

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以为您提供有关(带注释的)标签的详细信息。

于 2013-05-29T15:32:50.973 回答
5

git rev-parse mylabel^{}应该做你想做的。有关man gitrevisions更多信息,请参阅^{}和其他运算符。

于 2013-05-29T15:31:50.110 回答
4
git log <tag or branch> -1 --pretty=%H

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

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

于 2016-06-24T21:57:21.253 回答
-1

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

于 2013-05-29T15:30:25.550 回答