我有一个仓库,在同一个提交上有多个标签。举例来说:
commit #3 <--- TAG1 / TAG2 / TAG3
|
commit #2 <--- TAG4/ TAG5
|
commit #1 <--- TAG6/ TAG7
字符串
我想知道某个特定提交上有哪些标签。例如,如果我检查commit 1,我希望得到tag 6和tag 7。
我试过:
git checkout <commit 1>
git tag --contains
型
其显示标签1-7。
git checkout <commit 1>
git describe --tags HEAD
型
仅显示标签6。
在Git中正确的方法是什么?
9条答案
按热度按时间gudnpqoy1#
为了完成(感谢Ciro Santili的回答),
git tag
有一个选项--points-at
,它完全按照OP的要求执行。字符串
它并没有列出前向提交上的标签的效果(正如Jonathan Hartley在他关于
git tag --contains
的评论中所说的那样)。vddsk6oq2#
我想也许git已经添加了一些选项,因为这个问题被问到了,但因为它在谷歌上仍然很高,我想我会补充说这种方式很好:
字符串
或者将
HEAD
替换为您喜欢的任何其他有效提交引用。如果HEAD包含任何标签,这将打印一个以换行符分隔的标签列表,否则不打印任何标签,所以你会得到:
型
当然,有很多很好的方法与各种其他shell工具,你可以格式化输出,一旦你有它…
bzzcjhmw3#
对威廉的回答做了一些改进:
字符串
输出如下所示:
型
gorkyyrv4#
第一个月
--points-at
仅列出给定对象的标签(如果未指定,则为HEAD)。意味着...名单。
从https://git-scm.com/docs/git-tag
igsr9ssn5#
这并不理想,但可能有帮助:
字符串
你可以随意改变格式来得到你想要的。
u4dcyp6a6#
这将显示HEAD的提交id,以及恰好位于HEAD的任何分支或标记。
字符串
样品输出:
型
ntjbwcob7#
这里是@JoshLee回答的一个改进,它操纵输出只列出标签(不是分支,也不是HEAD),并删除单词“tag:”和装饰性标点符号。如果您正在编写脚本,需要查找当前标记(例如,把它们放在提示符中):
字符串
示例输出:
型
ef1yzkbh8#
我正在执行
git tag -l | grep $(git describe HEAD)
,它返回最新提交的标记,或者如果最后一次提交没有标记,则不返回任何标记vyswwuz29#
如果您使用的是
git tag --points-at HEAD
,请确保使用Git 2.42(Q3 2023)。“
git tag --list --points-at X
”(man)显示了直接引用对象X
的标签,但没有列出指向这样一个标签的标签,这已经在Git 2.42(Q3 2023)中得到了纠正。参见commit d9e0062,commit 870eb53,commit b9584c5(2023年7月2日)by Jeff King (
peff
)。参见commit 468887f(2023年7月1日)by Jan Klötzke (
jkloetzke
)。(由Junio C Hamano --
gitster
--合并于commit 5929e66,2023年7月25日)ref-filter
:处理--points-at选项中的嵌套标记签字人:扬·克勒茨克
标签被解除引用,直到到达不同的对象类型以处理嵌套标签,例如结账时。
相比之下,“
git tag --points-at=...
”(man)无法列出此类嵌套标记,因为在filter_refs()
中仅获得一个间接级别。在过滤引用时实现“
--points-at
“选项的递归解引用以统一行为。这将列出嵌套的标记,并且这样做会更快:
ref-filter
:避免解析match_points_at()
中的标记对象签字人:杰夫·金
当我们剥离标签以检查它们是否匹配
--points-at
oid时,我们递归地解析带标签的对象以查看它是否也是一个标签。但是由于标记本身告诉我们它所指向的对象的类型(甚至通过它的“标记”成员给我们适当的对象结构),我们可以直接使用它。
我们仍然需要确保在查看每个标记之前调用
parse_tag()
。这对于最外面的标记来说是多余的(因为我们调用了
parse_object()
来查找它的类型),但这没关系;parse_tag()
足够聪明,当标签已经被解析时,它会将此设置为noop。在我克隆的linux.git中,有782个标签(只有3个非标签),这产生了显著的加速(让我们回到了提交之前的位置,在这个提交开始递归地解引用标签之前):
字符串