Como faço para refazer uma cadeia de ramificações git locais?

Suponha que eu tenha uma cadeia de ramos git locais, assim:

       master    branch1   branch2
          |         |         |
o----o----o----A----B----C----D

Eu puxo uma alteração a montante para o ramo principal:

              branch1   branch2
                 |         |
            A----B----C----D
           /
o----o----o----o
               |
            master

Agora eu refiz o branch1, me dando o seguinte:

                        branch2
                           |
            A----B----C----D
           /          
o----o----o----o----A'---B'
               |         |
            master    branch1

Observe que, devido à reformulação da ramificação1, as confirmações A e B foram reescritas como A 'e B'.

Aqui está o meu problema: agora eu quero refazer o branch2. A sintaxe óbvia égit rebase branch1 branch2, mas isso definitivamente não funciona. O que eu quero fazer é apenas reaplicar C e D em cima do branch1, mas, em vez disso, tenta reconciliar A e A 'e os considera conflitantes.

Isso funciona:

git rebase --onto branch1 branch2^^ branch2

Isso pressupõe que eu sei que branch2 tem exatamente 2 confirma além da ref branch1 anterior.

Desde agit rebase --onto funciona, existe um comando git de 1 linha que rebase branch2 em cima de um branch1 rebased recentemente, de uma maneira que eu não precise saber exatamente quantos commits fizeram parte do branch2? (Quero especificar algumas referências mágicas em vez de branch2 ^^ para o argumento do meio.)

Ou existe alguma outra abordagem que estou ignorando?

Eu estaria mais interessado em uma solução que se adapta bem a casos extremos, não apenas a dois ramos - suponha que eu tenha algo mais como cinco ramos locais, todos encadeados um no outro, e eu quero refazer todos eles juntos.

questionAnswers(3)

yourAnswerToTheQuestion