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*
是一个附加过滤器与该模式匹配的标签。
我正在尝试在标签与特定模式匹配时在分支上列出标签和散列。
我有一个如下所示的命令:
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*
是一个附加过滤器与该模式匹配的标签。