我有一个存储库,在同一个提交中有多个标记。例如:
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中执行此操作的正确方法是什么?
答案 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)
答案 7 :(得分:0)
我在做git tag -l | grep $(git describe HEAD)
它返回最近提交的标签,如果最后一个提交没有标签,则返回