Consequências do uso de enxerto no Mercurial

Houve várias perguntas recentemente sobre ignorar alterações ao manter ramificações de lançamento no Mercurial. Por exemplo

Mercurial: alterações específicas de ramificações continuam voltando após a fusão fictíciaPor que os desvios do Mercurial em um ramo afetam outros ramos?

Desde que foi introduzido no 2.0, eu me perguntei sobre o uso degraft para evitar esse problema. Dada uma árvore de revisão como esta:

A---B---C---D---E---F---G---H---I---J

Suponhamos que seja necessário criar um ramo de lançamento que pule a alteração do MalE.

hg update -r D
hg graft "F::J"

dando-nos

A---B---C---D---E---F---G---H---I---J
             \
              --F'--G'--H'--I'--J'
Q1: O que aconteceu aqui? Eu posso entender quetransplant teria gerado patches a partir deF::J e, em seguida, os aplicou emD, masgraftiz-se que @ usa a mesclagem de 3 vias em vez de patches. Então, como isso funciona? Por que é melhor?

Digamos que agora conserteE e mescle isso no meu ramo de lançamento.

                  --E2-----------------
                 /                     \
A---B---C---D---E---F---G---H---I---J---M1
             \                            \
              --F'--G'--H'--I'--J'---------M2--

M1 é uma mesclagem direta; nada de especial lá. M2 está mesclando ramificações que possuem "as mesmas alterações" (ou pelo menos equivalentes

Q2: essa mesclagem é apenas uma mesclagem de 3 vias normal usandoD, J' eM1? Q3: O mercurial armazenou / usou informações extras sobre a operação de enxerto para ajudá-lo na mesclage

E finalmente..

Q4: Quais são os possíveis problemas com um fluxo como est

questionAnswers(4)

yourAnswerToTheQuestion