Git:如何让日志仅显示与模式匹配的标签?

时间:2018-10-20 00:04:21

标签: git git-log git-tag

当标签与特定模式匹配时,我正在尝试列出标签和分支上的哈希。

我有一个看起来像这样的命令

git log develop --tags="develop*" --remove-empty --pretty="%h %D" --decorate=short --decorate-refs=tags

我假设以上内容将为我打印带有与模式"develop*"相匹配的标签(例如develop_001)的提交哈希列表。但是我仍然会提交带有与模式不匹配的标签的提交(例如feature/*)。我从得到的输出中包含快照:

git log output

此外,是否有办法摆脱未标记的提交?

2 个答案:

答案 0 :(得分:1)

git log的工作通常是遍历提交图。在某些特定情况下,您告诉它不要这样做,而您的情况就是这些特定情况之一。

要告诉git log(不是)来遍历提交图,请使用--no-walk。 (或使用抑制提交图遍历的其他选项之一,但是这里--no-walk是正确的标志。)

请注意,您可能还希望 not 告诉它从develop开始。一般的想法(再次,您将告诉他们要做)是给git log一些起始提交或一组提交。它先找到那些提交,然后再找到每个提交的每个父提交,然后再找到那些父的父,依此类推。在工作时,它会打印出尚未访问的提交,然后访问其父母。

您命名的每个正引用(如Git所称),例如develop--tags="develop*"都是起点 。 Git将显示那个提交,然后执行图遍历/父查找。

添加--no-walk将停止父查找,因此git log仅显示起始提交。

答案 1 :(得分:1)

如果您要列出标签,请不要使用列出提交的git log。只需使用像这样的列表标签即可:

git tag --format="%(objectname:short) %(refname:short)" --merged develop  "v18*"

这里--format为您提供了hash + tag输出,-merged develop将输出限制为develop分支的祖先标记,v18*则是用于标记匹配的附加过滤器该模式。