我在存储库中有一堆没有注释的标记,我想弄清楚它们指向哪个提交。是否有一个命令只列出标签和它们的提交sha ?检查标签和查看头部似乎有点太费力对我来说。
更新
在检查完响应后,我意识到我实际上想要的只是查看标记之前的历史记录,对于这一点git log <tagname>就足够了。
标记为answer的答案对于获取标记及其提交的列表很有用,这就是我所要求的。通过一点shell hack,我相信可以将这些转换为SHA+Commit消息。
我在存储库中有一堆没有注释的标记,我想弄清楚它们指向哪个提交。是否有一个命令只列出标签和它们的提交sha ?检查标签和查看头部似乎有点太费力对我来说。
更新
在检查完响应后,我意识到我实际上想要的只是查看标记之前的历史记录,对于这一点git log <tagname>就足够了。
标记为answer的答案对于获取标记及其提交的列表很有用,这就是我所要求的。通过一点shell hack,我相信可以将这些转换为SHA+Commit消息。
当前回答
警告:这只适用于Unannotated标签,因此,它是更安全的使用已接受的答案,在一般情况下工作https://stackoverflow.com/a/1862542/1586965
git show-ref --tags
例如,git show-ref——abbrev=7——tags会显示如下内容:
f727215 refs/tags/v2.16.0
56072ac refs/tags/v2.17.0
b670805 refs/tags/v2.17.1
250ed01 refs/tags/v2.17.2
其他回答
我也想知道“正确”的方法,但同时,你可以这样做:
git show mytag | head -1
对于带注释的标记,git show-ref TAG显示标记的哈希值,而不是它所指向的提交的哈希值。
git show-ref——derefence 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邮件列表中,可以通过自动对带注释的标签解引用来获得标签的提交哈希列表:
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags
这将得到当前的SHA1哈希值
简化提交哈希
git show <tag> --format="%h" --> 42e646e
提交哈希
git show <tag> --format="%H" --> 42e646ea3483e156c58cf68925545fffaf4fb280