当只有一次提交时,为git filter-branch指定“最近提交”?

时间:2018-02-23 15:18:17

标签: git git-filter-branch

我有一个脚本,它使用git filter-branch对一组提交执行一些自动提交消息重写。默认情况下,它仅在最近的提交上运行,该提交被指定为HEAD^..(即,此提交的第一个父项与此提交之间的所有提交)。这样可以正常工作,但如果HEAD是根提交,则会失败:

fatal: ambiguous argument 'HEAD^..': unknown revision or path not in the working tree.

有没有办法指定一系列提交,只包含在两种情况下都能工作的顶级提交?或者我是否需要实现特殊处理以检测根提交?

请注意,虽然简单地使用HEAD只会在一次提交时工作得很好,但它确实意味着“此分支中的所有提交”因此在多于一个提交的情况下不起作用单一提交。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您正在编写脚本,并且正在寻找一个基于分支名称的范围说明符,您可以轻松地将其提供给git rev-list,这意味着:这一个提交,并且没有其他,但在基本说明符指向根提交时也有效。

一个这样的范围说明符:

${name} ^${name}^@

(由于某种原因不能拼写为${name}^@..${name}必须是两个独立的参数)。 ^@表示"给定修订版的所有父母,但不是给定修订版#34;所以前面的^否定了这一点,排除了所有父母。如果没有父母,它就不包括任何东西,无论如何都能实现我们想要的东西。

更简单的选择是传递文字--no-walk。这有点不同;试验您(或过滤器分支)将传递给git rev-list以查看的内容。只有当您没有给出参数范围时,才可以提供--no-walk HEAD