我在存储库中有一堆没有注释的标记,我想弄清楚它们指向哪个提交。是否有一个命令只列出标签和它们的提交sha ?检查标签和查看头部似乎有点太费力对我来说。

更新

在检查完响应后,我意识到我实际上想要的只是查看标记之前的历史记录,对于这一点git log <tagname>就足够了。

标记为answer的答案对于获取标记及其提交的列表很有用,这就是我所要求的。通过一点shell hack,我相信可以将这些转换为SHA+Commit消息。


当前回答

出租汽车司机的解决方案

解析.git/ packaged -refs并将其格式化为{tag}\t{sha}

sed -n '/ refs\/tags/ { s@\([^ ]*\) refs/tags/\(.*\)@\2\t\1@; p}' .git/packed-refs

其他回答

这个怎么样:

git log -1 $TAGNAME

OR

git log -1 origin/$TAGNAME

可以使用下面,它会给提交哈希 git show -s——format=%H <tag>^{提交}

如果需要简短的提交哈希,git show -s——format=%h <tag>^{commit}

为了获得标签引用的提交的sha/哈希值(不是标签的sha):

Git rev-list -1 <tag>

一种方法是使用git rev-list。下面将输出标签所指向的提交:

$ git rev-list -n 1 $TAG

注释标签和Unannotated标签都适用

您可以在~/中添加它作为别名。如果你经常使用Gitconfig:

[alias]
  tagcommit = rev-list -n 1

然后用:

$ git tagcommit $TAG

可能的陷阱:如果您有一个本地签出或具有相同标记名称的分支,这个解决方案可能会让您“警告:refname 'myTag'是不明确的”。在这种情况下,试着增加特异性,例如:

$ git rev-list -n 1 tags/$TAG

出租汽车司机的解决方案

解析.git/ packaged -refs并将其格式化为{tag}\t{sha}

sed -n '/ refs\/tags/ { s@\([^ ]*\) refs/tags/\(.*\)@\2\t\1@; p}' .git/packed-refs