コミットの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