如何按标签筛选Git日志?

6
我正在尝试按标签筛选git日志。根据文档,我尝试使用--tags="3.5.0",但它不起作用,因为它返回标签之前和之后的所有提交。
请问我该如何使用这个命令?

"git tag" 显示什么? - user5845413
@Philj0,“3.5.0”包含在结果中,以及所有其他内容。 - rj93
3个回答

6
筛选器可以包括任何内容。例如,git log 3.5.0将给出该标签之前的所有提交。git log 3.4.0..3.5.0将输出这些标签之间的所有提交。如果只想查看标签的提交,请使用git show 3.5.0。如果您必须查看所有标签及其相应的提交,则可以考虑使用类似于git tag -l | xargs git show的命令。
此外,请不要忘记在git log中添加--decorate以实际查看与提交关联的标签。

所以我正在尝试通过部分标签定位提交,因为CI/CD创建的标签遵循“项目名称-版本”的形式,并且在给定的提交ID之后。所以我的实际命令是git log <commitId>..HEAD tags="project-name"。从文档中了解到,“如果给出<pattern>,则将标签限制为与给定shell glob匹配的标签”,它应该只匹配模式匹配的标签,但它返回了所有内容。 - rj93
1
@rj93 说实话,--tags 对我也不起作用(或许有人可以给我们解释一下)。根据你的 shell,你可以直接搜索标签列表 git tag -l,例如 git tag -l | grep 'project' 或者 git tag -l | grep 'project' | xargs git show - SVSchmidt

1
我在自己的项目中遇到了(我认为)同样的问题。在我的情况下,我有几个标签“类别”,每个类别都有自己特定的版本控制,当我获得成功构建时,我想找到最近的标签,提取版本号,递增它,并使用该新版本标识符标记当前提交。
我不是100%清楚你的目标,但这里有一些代码,将输出与指定正则表达式匹配的最新提交ID:
tagRegex='foo'; # fill in your tag pattern here
git log --format='%h %D' | sed -n "/ tag: .*$tagRegex/ {s/ .*//; p;q;}";

My tags are of the form category-v1.2.3, and I'm interested in the semantic version attached to the tag rather than the commit ID, so I use this:

git log --format='%D' | sed -n "/^tag: .*$tagRegex/ {s/.*-v//; p;q;}";

0

我曾经遇到过类似的问题,最终来到了这里。我的解决方案是扩展其他答案,得到:

git log <commitId>..HEAD --format='%h %D' | grep '<projectRegex>' | awk '{print $1}' | xargs git show --no-patch

这将为您显示一个git日志样式的历史记录,其中包含在您的commitId和HEAD之间的所有提交的标签(或提交哈希,如果您不幸的话--您可以使用前缀为空格的正则表达式来解决此问题,因为标签不能包含空格--例如\sprojectRegex.*$)匹配。

逐个解释每个管道符

  1. 获取您的commitId和HEAD之间的提交哈希和标签。
  2. 按标签过滤,因为它们现在表示为字符串。
  3. 提取匹配的提交哈希。
  4. 使用git show逐个哈希只显示提交消息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接