我的回购中有这两个命名的分支。稳定和开发。我的问题是如何将一个在stable中更改的bug修补程序复制到dev分支?我真的想在框架内这样做,而不是任何扩展:)
修改
我为这个问题设置了赏金,因为我真的想要解决方案。有一个很好的解决方案,但中途离开。所以我别无选择。它现在似乎得到了回答。但是我会在另一天让问题公平,以防有人有更好的解决方案。希望有道理。 :)
答案 0 :(得分:10)
要扩充Tim's answer,另一种接近它的方法是Mercurial建议您如果可以的话,提前做好计划(我会看看是否可以勾勒出一个链接。)
计划是,如果您知道错误修正/更改必须进入多个分支,您不会将该变更集提交到其中一个地方开始,而是在其他地方执行。
由于您正在修复项目历史中某处的错误,因此引入了该错误。
由于bugfix需要进入多个分支,因此“某处”必须在分支点之前,否则错误不会出现在两个(/ all)分支中。
因此,推荐的方法是修复引入错误的方法,然后将该更改集合并到需要它的每个分支中。
让我们看一个示例,我们有default
和stable
分支:
1---2---3---4---5---6---7---8---9---10 default
\ \
\ \
11--------------12--13 stable
然后您发现变更集2引入了一个错误,并且错误修复需要同时应用于default
和stable
。你在问题中描述它的方式,看起来你会这样做:
1---2---3---4---5---6---7---8---9---10--15 default
\ \ /^-- merge stable into default
\ \ /
11--------------12--13----14 stable
^-- bugfix
但是这也会将变更集13合并到default
中。如果您不希望这种情况发生,您可以这样做:
v-- bugfix
14--------------------------+--+
/ | \
/ | \
1---2---3---4---5---6---7---8---9--x-10--15 default
\ \ | ^-- merge 14 into default
\ \ |
11--------------12--13--16 stable
^-- merge 14 into stable
有关如何在错误修正方案中使用Mercurial的更多信息,9th Chapter of 'Mercurial: The Definitive Guide'非常值得一读。
答案 1 :(得分:5)
如果您的dev
分支是“稳定命名分支”的后代,那么您可以简单地
hg update dev
hg merge stable
如果这不可行,那么最自然的答案是transplant
extension。此扩展程序随Mercurial一起发布,因此您只需向mercurial.ini
或.hgrc
添加一行即可启用它。启用它后,您可以:
hg update dev
hg transplant --log <rev>
如果确实想要避免使用扩展程序,那么您可以使用export
和import
:
hg export --rev <rev> > tmp.patch
hg update dev
hg import tmp.patch
答案 2 :(得分:0)
Transplant extension很好地完成了这个诀窍 - 正是你想要的