您不能只覆盖历史中间的提交,因为提交的 sha1 取决于父级的。所以,git 不知道你想在过滤后将你的 HEAD 引用指向哪里。所以,你应该重写所有的 HEAD。
例子:
A---B---C---D---E---F master
\
\--G---H branch
如果你想过滤提交 B 和 C,你还应该过滤所有提交:D、E、F、G、H。所以,这就是为什么 git 告诉你在范围的末尾使用 ref,这样它就不会完成带着一个分离的头。
修改 B 和 C 提交并停止后将如下所示:
A---B---C---D---E---F master
\ \
\ \--G---H branch
\-B'--C' (HEAD or a temporary TAG?..)
因此,master
andbranch
将保持不变。我不认为这是你想要的。这意味着您必须覆盖所有提交。历史将是:
A---B---C---D---E---F (loose end, will be garbage collected one day)
\ \
\ \--G---H (loose end, will be garbage collected one day)
\-B'--C'--D'--E'--F' master
\
\--G'--H' branch