当标签与特定模式匹配时,我正在尝试列出标签和分支上的哈希。
我有一个看起来像这样的命令
:git log develop --tags="develop*" --remove-empty --pretty="%h %D" --decorate=short --decorate-refs=tags
我假设以上内容将为我打印带有与模式"develop*"
相匹配的标签(例如develop_001
)的提交哈希列表。但是我仍然会提交带有与模式不匹配的标签的提交(例如feature/*
)。我从得到的输出中包含快照:
此外,是否有办法摆脱未标记的提交?
答案 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*
则是用于标记匹配的附加过滤器该模式。