2010-02-24 71 views
30

我有一个在同一提交中有多个标签的存储库。例如:如何在当前提交上获取标签

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中执行此操作的正确方法是什么?

回答

3

这不是理想的,但或许有所帮助:

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

你可以玩的格式来得到你想要什么。

+0

感谢您的信息,我的回购有超过300种不同的产品。按“Q”300次真的很难。 – Shawn 2010-02-24 08:07:41

+0

@Shawn没有必要按Q ... – 2010-02-24 16:55:57

+0

每当我使用git log来显示任何东西时,我需要按q按钮退出日志显示模式。不知道你是否面临相同的 – Shawn 2010-02-25 06:40:51

17

对威廉的回答了一些改进:

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) 
+1

这是一个很酷的提示 – cmcginty 2010-02-25 02:24:26

+0

我想添加sed/tr/grep命令将此输出转换为没有标点符号的普通列表。我可以直接构建这样一个'git log'命令,但是当我将它放入git config alias中时,转义会使我失望。这里是我的日志命令:git log -n1 --pretty =“format:%d”| sed“s /,/ \ n/g”| grep标签| sed“s/tag:\ |)// g” – 2014-04-17 14:12:32

+0

我对此进行了改进,使其对自动化脚本更有用(例如,将标记放入提示中),并在下面的答案中作出答复... – 2014-04-23 08:55:13

18

我想也许混帐已经有了一些选择加入,因为这个问题被问过,但因为它仍然来自在谷歌相当高,我想我补充说,这种方式很好地工作:

git tag -l --contains HEAD 

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

这将打印换行分隔的标签列表如果头中包含任何标记,并打印什么,否则,这样你会得到:

TAG6 
TAG7 

当然,也有很多不错的方式与其他各种外壳工具,你可以格式化输出,一旦你有它...

+1

完美地工作。你为什么需要'-l'?从手册看来,没有args的'-l'列出了所有的标签,这与没有参数的'tag'相同。 – 2013-07-03 10:09:44

+0

@cirosantilli oops,我想我没有仔细阅读手册。虽然我认为我喜欢添加'-l',因为如果我忘记'--contains'标志,它确保我不会添加新标签。 – arcticmac 2013-07-26 20:28:32

+6

这给出了错误的输出。它显示所有'包含'给定提交的标签,即包含应用于先前可达提交的标签。原始问题明确表示他不想要这些旧标签,只有在给定提交上的“当前”标签。 – 2014-04-23 08:58:28

3

这里是@ JoshLee的答案,它操纵输出只列出标签(不是分支,也不是HEAD)和剥离单词'标签:'和装饰性标点符号。这是如果你正在编写脚本的东西了一个需要查找当前有用的标记(例如,把它们放在你的提示):

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 
3

这显示HEAD的提交ID,以及任何分支或任何也恰好在HEAD处的标签。

git reflog --decorate -1 

输出示例:

484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) [email protected]{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD 
55

完成(感谢西罗Santili答案),git的标签已经拿到了选项--points,那不正是肖恩是问。

git tag -l --points-at HEAD 

它没有效果还列出换上前锋标签犯乔纳森·哈特利在他的git的标签--contains的评论说。

+0

这是这里最好的答案。不需要复杂的命令行,但只给出标签名称。 – 2016-09-20 17:16:48

+0

正是我需要的,谢谢。 – 2017-10-25 23:54:53

相关问题