最近有几个关于在 Mercurial 中维护发布分支时跳过更改的问题。例如:
由于它是在 2.0 中引入的,我一直想知道如何使用它graft
来避免这个问题。给定这样的修订树:
A---B---C---D---E---F---G---H---I---J
假设我们需要创建一个跳过 Evil 更改的发布分支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
据说使用 3 路合并而不是补丁。所以.......这是如何工作的?为什么更好?
假设我现在修复E
,并将其合并到我的发布分支中。
--E2-----------------
/ \
A---B---C---D---E---F---G---H---I---J---M1
\ \
--F'--G'--H'--I'--J'---------M2--
M1是直接合并;那里没什么特别的。M2 正在合并具有“相同”(或至少等效)更改的分支。
- Q2:这种合并只是使用
D
,J'
和的普通 3 路合并M1
吗? - Q3:mercurial 是否存储/使用了有关移植操作的额外信息来帮助它进行合并?
最后...
- Q4:这样的流程有哪些潜在问题?