我有一个脚本,它使用git filter-branch
对一组提交执行一些自动提交消息重写。默认情况下,它仅在最近的提交上运行,该提交被指定为HEAD^..
(即,此提交的第一个父项与此提交之间的所有提交)。这样可以正常工作,但如果HEAD是根提交,则会失败:
fatal: ambiguous argument 'HEAD^..': unknown revision or path not in the working tree.
有没有办法指定一系列提交,只包含在两种情况下都能工作的顶级提交?或者我是否需要实现特殊处理以检测根提交?
请注意,虽然简单地使用HEAD
只会在一次提交时工作得很好,但它确实意味着“此分支中的所有提交”因此在多于一个提交的情况下不起作用单一提交。
答案 0 :(得分:1)
如果我理解正确,您正在编写脚本,并且正在寻找一个基于分支名称的范围说明符,您可以轻松地将其提供给git rev-list
,这意味着:这一个提交,并且没有其他,但在基本说明符指向根提交时也有效。
是一个这样的范围说明符:
${name} ^${name}^@
(由于某种原因不能拼写为${name}^@..${name}
,必须是两个独立的参数)。 ^@
表示"给定修订版的所有父母,但不是给定修订版#34;所以前面的^
否定了这一点,排除了所有父母。如果没有父母,它就不包括任何东西,无论如何都能实现我们想要的东西。
更简单的选择是传递文字--no-walk
。这有点不同;试验您(或过滤器分支)将传递给git rev-list
以查看的内容。只有当您没有给出参数范围时,才可以提供--no-walk HEAD
。