如何将补丁分成两部分(使用pbranch)?

时间:2011-08-16 10:29:47

标签: mercurial mercurial-extension

我正在使用mercurial存储库并使用pbrach来处理一组补丁。

假设我有两个文件A和B,以及两个补丁patchA(修改A)和patchAB(修改A和B)。 pgraph看起来像这样:

o  patchAB
|
@  patchA
|
o  default

我错误地将文件B更改为patchA。

如何将补丁A分成两部分,以便最终得到:patchA = patchA'+ newPatch,其中patchA =原始补丁,patchA'=文件A中patchA的变化,P2 =补丁A的变化文件B。

o  patchAB
|
| o newPatch // rest of original patchA without changes already in patchA'
|/
@  patchA' // with only the changes to file A
|
o  default

(我搜索的内容与splitting patches with mq类似,但是对于pbranch来说。)

1 个答案:

答案 0 :(得分:2)

最后,我自己找到了一个相对较短的解决方案。

首先,我得到最后一次“好”提交的修订号(比如说1)和错误提交(比如说2)。

1)我更新到patchA,恢复对fileB的更改,并提交它,并向上推进更改:

hg up patchA
hg revert -r1 fileB  // get fileB before the wrong change
hg commit -m"revert fileB"
hg pmerge -a

2)再次更新到patchA,恢复错误的提交并创建一个新的补丁:

hg up patchA
hg revert -r2 fileB  // get fileB after the wrong change
hg pnew patchA2

我们现在在patchA中更改了fileA,其余的在patchA2中。