如何在git中列出指向特定提交的所有标记

时间:2010-12-28 10:32:55

标签: git tags

我看过命令git describegit-name-rev,但我还没有设法让它们列出多个标签。

示例:我有sha1 48eb354,我知道标签A和B指向它。所以我想要一个git命令git {something} 48eb354,它产生类似于“A,B”的输出。我不想知道相对于其他标签或分支的引用只是标签的完全匹配。

6 个答案:

答案 0 :(得分:155)

git tag --points-at HEAD

在HEAD显示所有标签,您也可以用任何sha1 id替换HEAD。

答案 1 :(得分:37)

git show-ref --tags -d | grep ^48eb354 | sed -e 's,.* refs/tags/,,' -e 's/\^{}//'

应适用于轻量级和带注释的标签。

答案 2 :(得分:33)

您可以使用:

git tag --contains <commit>

显示特定提交时的所有标记。 它可以代替:

git tag --points-at HEAD

仅适用于1.7.10。

答案 3 :(得分:4)

git for-each-ref --format='%(objectname) %(refname:short)' refs/tags/ |
  grep ^$commit_id |
    cut -d' ' -f2

可惜它不能轻易完成。 git tag上包含提交ID的另一个标志可以自然地表达git for-each-ref调用。

答案 4 :(得分:1)

以下命令执行该作业,但直接解析.git目录的内容,因此如果git存储库格式发生更改,则可能会中断。

grep -l -r -e '^48eb354' .git/refs/tags|sed -e 's,.*/,,'

答案 5 :(得分:1)

对于当前提交,您可以使用

git tag --points-at $(git log -n1 --pretty='%H')