我在存储库中有一堆未注释的标记,我想知道它们指向哪个提交.是否有一个命令只列出标签及其提交SHA?检查标签并查看HEAD对我来说似乎有点过于费力.
我在通过回复之后意识到,我真正想要的只是简单地看一下导致标签的历史,这就git log <tagname>足够了.
标记为答案的答案对于获取标签及其提交列表很有用,这就是我的要求.有一点shell hackery我敢肯定可以将它们转换为SHA + Commit消息.
mip*_*adi 317
一种方法是做到这一点git rev-list.以下将输出标记指向的提交:
$ git rev-list -n 1 $TAG
Run Code Online (Sandbox Code Playgroud)
~/.gitconfig如果您经常使用它,可以将其添加为别名:
[alias]
tagcommit = rev-list -n 1
Run Code Online (Sandbox Code Playgroud)
然后调用它:
$ git tagcommit $TAG
Run Code Online (Sandbox Code Playgroud)
CB *_*ley 223
git show-ref --tags
Run Code Online (Sandbox Code Playgroud)
例如,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
Run Code Online (Sandbox Code Playgroud)
Hlu*_*ung 95
只是用 git show <tag>
但是,它也会转储提交差异.要省略这些差异,请使用git log -1 <tag>.(感谢@DolphinDream和@demisx!)
ori*_*rip 39
在我的存储库中,git show-ref TAG显示标记的哈希值,而不是它指向的提交的哈希值.
git show-ref --dereference TAG 此外,还显示了指向的提交.
Jak*_*ski 33
使用
git rev-parse --verify <tag>^{commit}
Run Code Online (Sandbox Code Playgroud)
(即使对于带注释的标签,也会返回提交的SHA-1).
git show-ref <tag>如果<tag>没有注释也会有用.总是有git for-each-ref(详见文档).
小智 33
来自Igor Zevaka:
由于大约有4个几乎同样可接受但又不同的答案,我将总结所有不同的方法来标记标签.
git rev-list -1 $TAG(回答).git rev-list输出导致$TAG类似git log但仅显示提交的SHA1的提交.将-1输出限制为它指向的提交.
git show-ref --tags(回答)将显示所有标签(本地和从远程获取)及其SHA1.
git show-ref $TAG(回答)将显示标签及其路径以及SHA1.
git rev-parse $TAG(回答)将显示未注释标签的SHA1.
git rev-parse --verify $TAG^{commit}(回答)将显示带注释和未注释标签的SHA1.在Windows上使用git rev-parse --verify %TAG%^^^^{commit}(四个帽子).
cat .git/refs/tags/*或cat .git/packed-refs(答案)取决于标签是本地的还是从遥控器取出的.
Tuo*_* Le 15
这个怎么样:
git log -1 $TAGNAME
Run Code Online (Sandbox Code Playgroud)
要么
git log -1 origin/$TAGNAME
Run Code Online (Sandbox Code Playgroud)
Jes*_*sen 10
Git-2 后的简短回答
我知道这个问题已经存在很长一段时间了。CB Bailey 的回答是 100% 正确的:git show-ref --tags --abbrev
我更喜欢这个,因为它使用git tag:
git tag --list --format '%(refname:short) %(objectname:short)'
Run Code Online (Sandbox Code Playgroud)
简单的。短的。
PS别名它git taglist与此命令一样:
git config --global alias.taglist "tag --list --format '%(refname:short) %(objectname:short)'"
Run Code Online (Sandbox Code Playgroud)
Nat*_*han 10
该--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"
Run Code Online (Sandbox Code Playgroud)
给出类似于以下内容的输出:
== 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.
Run Code Online (Sandbox Code Playgroud)
要定义为 git 别名,您可以编辑全局 git 配置并git config --global -e添加以下内容:
[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'
Run Code Online (Sandbox Code Playgroud)
别名仍然允许过滤,例如
C:\playground>git tag-verbose -l *b2*
== b2lightweight ==
(lightweight tag)
Commit: 0450fae4352dbbbf088419757eda32711316a02e
Run Code Online (Sandbox Code Playgroud)
有关--format选项的更多信息,请参阅下面的“字段名称”部分git help for-each-ref。(git help tag声明“格式与 git-for-each-ref 的格式相同”)
小智 7
即使这已经很老了,我想我会指出一个很酷的功能,我刚刚找到列出标签的提交:
git log --decorate=full
Run Code Online (Sandbox Code Playgroud)
它将显示在提交时结束/开始的分支以及提交的标记.
您还可以获得更易于解释的标签指向使用位置的图片
git log --graph |git name-rev --stdin --tags |less
Run Code Online (Sandbox Code Playgroud)
然后通过 滚动到您要查找的标签/。
更紧凑的视图 ( --pretty=oneline) 加上所有头 ( -a) 也有帮助:
git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less
Run Code Online (Sandbox Code Playgroud)
看起来有点吓人,但也可以在~/.gitconfig必要时使用别名。
~/.gitconfig
[alias]
ls-tags = !git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less
Run Code Online (Sandbox Code Playgroud)