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

Git: how to have log show only tags that match a pattern?

我正在尝试在标签与特定模式匹配时在分支上列出标签和散列。

我有一个如下所示的命令:

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

我假设上面的内容会为我打印一个提交哈希列表,其中的标签与模式"develop*"(例如develop_001)相匹配。但我仍然收到带有与模式不匹配的标签的提交(例如 feature/*)。我包括了我得到的输出的快照:

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

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

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

请注意,您可能还希望 而不是 告诉它从 develop 开始。一般的想法(同样,您将告诉它 去做)是您给 git log 一些开始提交或一组提交。它找到那些提交,然后找到每个提交的每个 parent 提交,然后是那些 parents 的 parents,等等。在工作时,它会打印出尚未访问的提交,然后访问它们的 parents.

您命名的每个 正引用 (Git 称呼它们),例如 develop--tags="develop*" 充当起点。 Git 将显示 提交,然后执行 graph-walking / parent-finding.

添加 --no-walk 停止 parent-finding,因此 git log 仅显示开始提交。

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

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

此处 --format 为您提供散列+标签输出,-merged develop 将输出限制为 develop 分支的祖先标签,v18* 是一个附加过滤器与该模式匹配的标签。