我正在使用标签来识别发布版本并识别任务的“开发完成”提交。做git tag
我得到如下列表。
> git tag
v0.1.0
task_1768
task_2011
task_1790
task_1341
v0.1.1
task_2043
task_2311
v0.1.2
假设所有标签都指向master
分支上的提交,有没有办法列出所有标签,因为有些标签?例如,要生成v0.1.2
版本中包含的所有任务的列表 - 我正在寻找类似以下内容(这不是实际命令)。
> git tag -l "task_*" --since v0.1.1
获得如下输出。
task_2043
task_2311
有没有办法用git tag
执行此操作?
有没有办法用git rev-list
执行此操作?
(或其他一些git命令?)
根据答案和评论,我正在使用以下内容。
> git log v0.1.1.. --decorate | grep -Eow 'tag: ([a-zA-Z0-9.-_]*)' | awk '{ print substr($0, 6); }'
task_2043
task_2311
v0.1.2
> git log v0.1.1.. --decorate | grep -Eow 'tag: ([a-zA-Z0-9.-_]*)' | awk '{ print substr($0, 6); }' | grep -Eo 'task_.*'
task_2043
task_2311
新选择的答案。这正是我最初寻找的。更优雅。
> git tag --contains v0.1.1
v0.1.1
task_2043
task_2311
v0.1.2
> git tag --contains v0.1.1 | grep -Eo 'task_.*'
task_2043
task_2311
答案 0 :(得分:9)
git tag --contains v0.1.1
会显示包含给定标记的所有标记 - 即您可以在其中追溯历史记录并到达给定标记的标记。
答案 1 :(得分:4)
您可以为git log
提供范围:
git log v1.1.0..
现在添加--decorate
选项,列出标签。还有其他选项可以添加到日志中以将列表限制为有趣的列表,或者将其列为“标记”:
git log v1.1.0.. --decorate | grep 'tag:'
答案 2 :(得分:2)
您可以使用git rev-list
按照master
中的链接为您提供所有可修订的版本,不包括v0.1.1
中可以访问的任何内容:
git rev-list --tags master --not v0.1.1
然后,您可以通过git describe
:
git describe --abbrev=0 --tags `git rev-list --tags master --not v0.1.1`
这可能会为您提供标签的重复副本(并且可能包含v0.1.1
本身),但它应该是获取所需列表的开始。