我在存储库中有一堆没有注释的标记,我想弄清楚它们指向哪个提交。是否有一个命令只列出标签和它们的提交sha ?检查标签和查看头部似乎有点太费力对我来说。
更新
在检查完响应后,我意识到我实际上想要的只是查看标记之前的历史记录,对于这一点git log <tagname>就足够了。
标记为answer的答案对于获取标记及其提交的列表很有用,这就是我所要求的。通过一点shell hack,我相信可以将这些转换为SHA+Commit消息。
我在存储库中有一堆没有注释的标记,我想弄清楚它们指向哪个提交。是否有一个命令只列出标签和它们的提交sha ?检查标签和查看头部似乎有点太费力对我来说。
更新
在检查完响应后,我意识到我实际上想要的只是查看标记之前的历史记录,对于这一点git log <tagname>就足够了。
标记为answer的答案对于获取标记及其提交的列表很有用,这就是我所要求的。通过一点shell hack,我相信可以将这些转换为SHA+Commit消息。
当前回答
尽管这已经很老了,但我想指出我刚刚发现的一个很酷的功能,用于列出带有提交的标记:
git log --decorate=full
它将显示在提交处结束/开始的分支,以及提交的标记。
其他回答
一种方法是使用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 show <tag>
但是,它也转储提交差异。要忽略这些差异,使用git log -1 <tag>。(感谢@DolphinDream和@demisx !)
我也想知道正确的方法,但你总是可以窥探到:
$ cat .git/packed-refs
or:
$ cat .git/refs/tags/*
format选项可用于显示标记散列和提交散列,并用于区分轻量级标记和带注释的标记。
git tag --format="%(color:bold cyan)== %(refname:short) ==%(if)%(object)%(then)%0aTag Hash: %(objectname)%0aTag Date: %(taggerdate:iso-local)%0a Commit: %(object) %0a%0a%(contents)%(else)%0a(lightweight tag)%0a Commit: %(objectname)%(end)%0a"
输出类似于:
== b2lightweight ==
(lightweight tag)
Commit: 0450fae4352dbbbf088419757eda32711316a02e
== c3_annotated ==
Tag Hash: 19961d8678a09a319a9d6c398c79f27cc23d610c
Tag Date: 2021-08-06 15:18:48 -0600
Commit: 85be6e80c109ce44d78f0ca0da8e1ec53817b24c
This is my tag message.
It has multiple lines.
Another line.
要定义为git别名,你可以使用git config——global -e编辑全局git配置,并添加以下内容:
[alias]
tag-verbose = tag --format='%(color:bold cyan)== %(refname:short) ==%(if)%(object)%(then)%0aTag Hash: %(objectname)%0aTag Date: %(taggerdate:iso-local)%0a Commit: %(object) %0a%0a%(contents)%(else)%0a(lightweight tag)%0a Commit: %(objectname)%(end)%0a'
别名仍然允许过滤,例如。
C:\playground>git tag-verbose -l *b2*
== b2lightweight ==
(lightweight tag)
Commit: 0450fae4352dbbbf088419757eda32711316a02e
有关——format选项的更多信息,请参阅git help For -each-ref下的“字段名称”部分。(git帮助标签声明“格式与git-for-each-ref相同”)
您还可以获得更容易理解的标签指向何处使用的图片
git log --graph |git name-rev --stdin --tags |less
然后通过/滚动到您正在寻找的标记。
更紧凑的视图(——pretty=oneline)加上所有头像(-a)也可以帮助:
git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less
看起来有点可怕,但也可以在~/中别名。Gitconfig(如果需要的话)。
~/.gitconfig
[alias]
ls-tags = !git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less