Bar*_*uch 4 merge mercurial tortoisehg
我试图将提交的一部分从默认分支(不是所有文件和其他文件的一部分)合并到命名分支。我试过了graft,但是整个提交都没有给我选择的机会。怎么做?
例:
A---B---C---D
\
-E---(G)
Run Code Online (Sandbox Code Playgroud)
G还不存在。可以说C,D每个添加了5个文件,修改了5个文件。我想G在添加5个文件中的2个,C对其中一个文件进行所有修改,并对另一个文件进行一个修改。我理想地希望它也有类似的东西D。
选择时graft to local...,我得到的只是整个C变更集。相同的merge with local...
合并的单位是一个整体变更集,因此C和D应该以较小的部分提交。您现在可以合并整个文件并还原一些文件,但这将导致您以后无法合并其余文件,因为它们已经被视为已合并。
我要做的是建立一个与CD平行的分支,在您的示例中植根于B,其中包含C和D的更改的副本,但将它们拆分为相关的部分。然后,您可以从中合并整个变更集,然后关闭(或什至删除)原始CD分支。
C---D
/
A---B--C1--D1--C2--D2 (equivalent to C--D)
\
E---(G?)
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,C1和C2等效于C。在我这样做的同时,我又对四个新的变更集进行了重新排序(使用诸如的历史记录重写工具rebase),因此您可以简单地将D1与E合并:
C---D
/
A---B--C1--D1--C2--D2
\ \
E------G
Run Code Online (Sandbox Code Playgroud)
如果不能对新变更集进行重新排序,则必须进行一些花哨的舞曲来按C1,D1,C2,D2的顺序提交部分变更集;使用graft(或transplant)复制不允许单独合并的更改可能会少很多麻烦。例如,在下面,您仍然可以合并C1,但是您需要D1的副本(标记为D1'),因为如果不将C2与C2一起拉就无法合并。
C---D
/
A---B--C1--C2--D1--D2
\ \
E--G1--D1'
Run Code Online (Sandbox Code Playgroud)