【发布时间】:2012-03-24 19:36:38
【问题描述】:
最近有几个关于在 Mercurial 中维护发布分支时跳过更改的问题。例如:
- Mercurial: Branch specific changes keep coming back after dummy merge
- Why are Mercurial backouts in one branch affecting other branches?
自从在 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'和M1的普通三向合并? - Q3:mercurial 是否存储/使用了有关移植操作的额外信息来帮助它进行合并?
最后……
- Q4:这样的流程有哪些潜在问题?
【问题讨论】:
标签: version-control mercurial branch dvcs cherry-pick