在git中,列出自某些标记以来的所有标记

时间:2013-01-10 00:05:37

标签: git git-tag git-rev-list

我正在使用标签来识别发布版本并识别任务的“开发完成”提交。做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

3 个答案:

答案 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本身),但它应该是获取所需列表的开始。