Недавно появилось несколько вопросов о пропуске изменений при сохранении ветвей выпуска в Mercurial. Например:
- Mercurial: специфические изменения в отрасли продолжают возвращаться после фиктивного слияния
 - Почему резервные копии Mercurial в одной ветке влияют на другие ветки?
 
Поскольку он был введен в 2.0, я задался вопросом об использовании graft, чтобы избежать этой проблемы. Учитывая дерево изменений следующим образом:
A---B---C---D---E---F---G---H---I---J
Предположим, нам нужно создать ветвь релиза, которая пропускает изменение зла E.
hg update -r D
hg graft "F::J"
дает нам:
A---B---C---D---E---F---G---H---I---J
             \
              --F'--G'--H'--I'--J'
-  Q1: Что здесь произошло? Я могу понять, что 
transplantсоздавал бы патчи изF::J, а затем применял их наD, но, как говорят,graftиспользует трехстороннее слияние, а не патчи. Итак... как это работает? Почему это лучше? 
Скажем, теперь я исправлю E и объединить его в мою ветвь release.
                  --E2-----------------
                 /                     \
A---B---C---D---E---F---G---H---I---J---M1
             \                            \
              --F'--G'--H'--I'--J'---------M2--
M1 - прямое слияние; ничего особенного нет. M2 объединяет ветки, которые имеют "те же" (или, по крайней мере, эквивалентные) изменения.
-  Q2: Объединяет ли это просто нормальное трехстороннее слияние с помощью 
D,J'иM1? - Q3: Меркурий хранит/использует дополнительную информацию о операции трансплантата, чтобы помочь ему слиянием?
 
И наконец...
- Q4: Каковы потенциальные проблемы с потоком, подобным этому?