如何在当前提交中获取标记

时间:2010-02-24 06:48:04

标签: git

我有一个存储库,在同一个提交中有多个标记。例如:

commit #3 <--- TAG1 / TAG2 / TAG3

  |

commit #2 <--- TAG4/ TAG5

  |

commit #1 <--- TAG6/ TAG7

我想找出特定提交中的标签。例如,如果我检查提交1,我想获得标记6和标记7。

我试过了:

git checkout <commit 1> 
git tag --contains

显示标签1-7。

git checkout <commit 1>
git describe --tags HEAD

仅显示标签6.

在Git中执行此操作的正确方法是什么?

8 个答案:

答案 0 :(得分:88)

为了完成(感谢Ciro Santili的回答),git-tag已经有了选项 - points-at就像Shawn所要求的那样。

git tag -l --points-at HEAD

如Jonathan Hartley在他对git-tag --contains的评论中所说的那样,它也无法列出正向提交的标签。

答案 1 :(得分:22)

我想也许git已经添加了一些选项,因为这个问题被问到了,但是因为它在谷歌上仍然很高,我想我会补充说这种方式很好用:

git tag -l --contains HEAD

或者将HEAD替换为您喜欢的任何其他有效提交引用。

如果HEAD包含任何标签,这将打印换行符号的换行符,否则不打印,所以你会得到:

TAG6
TAG7

当然,有很多很好的方法可以使用各种其他shell工具,一旦你拥有它就可以格式化输出...

答案 2 :(得分:18)

威廉回答的一些改进:

git config --global alias.tags 'log -n1 --pretty=format:%h%d'

输出如下:

~$ git tags
7e5eb8f (HEAD, origin/next, origin/master, origin/HEAD, master)
~$ git tags HEAD~6
e923eae (tag: v1.7.0)

答案 3 :(得分:4)

这不太理想,但也许有用:

$ git log -n 1 --decorate --pretty=oneline

您可以使用该格式来获得您想要的内容。

答案 4 :(得分:4)

这将显示HEAD的提交ID,以及恰好恰好位于HEAD的任何分支或任何标记。

git reflog --decorate -1

示例输出:

484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) HEAD@{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD

答案 5 :(得分:3)

这是@JoshLee的答案的改进,它操纵输出只列出标签(不是分支,也不是HEAD)并剥离单词&#39;标记:&#39;和装饰标点符号。如果您要编写需要查找当前标记的内容(例如将它们放在提示中),这非常有用:

git log -n1 --pretty="format:%d" | sed "s/, /\n/g" | grep tag: | sed "s/tag: \|)//g"

示例输出:

$ git log -n 1 --decorate=short
commit a9313...c7f2 (HEAD, tag: v1.0.1, tag: uat, mybranch)
...
$ git log -n1 --pretty="format:%d" | sed "s/, /\n/g" | grep tag: | sed "s/tag: \|)//g"
v1.0.1
uat

答案 6 :(得分:1)

git tag --points-at

  

- 指向

     

仅列出给定对象的标签(如果未指定,则为HEAD)。意思是 - 列表。

来自https://git-scm.com/docs/git-tag

答案 7 :(得分:0)

我在做git tag -l | grep $(git describe HEAD) 它返回最近提交的标签,如果最后一个提交没有标签,则返回