我正在尝试将默认分支(不是所有文件和其他文件的部分)的部分提交合并到命名分支。我试过graft
,但它只是让整个提交给我一个机会选择。怎么会这样做?
示例:
A---B---C---D
\
-E---(G)
G
尚不存在。让我们说C
和D
每个添加5个文件并修改5个文件。我希望G
在C
添加5个文件中的2个,对其中一个文件进行所有修改,对另一个文件进行一次修改。理想情况下我也喜欢D
。
当我选择graft to local...
时,我得到的只是整个C
更改集。 merge with local...
答案 0 :(得分:4)
合并的单位是整个变更集,因此C和D应该以较小的部分提交。您现在可以合并整个内容并还原一些文件,但这会导致您以后无法合并其余文件 - 它们已被视为已合并。
我要做的是制作一个与C-D平行的分支,在你的例子中以B为根,它包含C和D中变化的副本,但是将它们分成连贯的部分。然后,您可以合并整个变更集,并关闭(或甚至删除)原始C-D分支。
C---D
/
A---B--C1--D1--C2--D2 (equivalent to C--D)
\
E---(G?)
在上面,C1和C2一起相当于C.当我在它时,我继续重新排序了四个新的变更集(使用历史重写工具,如rebase
),这样你就可以然后简单地将D1与E合并:
C---D
/
A---B--C1--D1--C2--D2
\ \
E------G
如果不能重新排序新的变更集,则必须进行一些花哨的tapdancing以按C1,D1,C2,D2的顺序提交部分变更集;使用graft
(或transplant
)复制您不允许单独合并的更改可能会少得多。例如,在下面你仍然可以合并C1,但是你需要一个D1的副本(标记为D1'),因为如果不将C2与它一起合并就无法合并它。
C---D
/
A---B--C1--C2--D1--D2
\ \
E--G1--D1'