5

我正在尝试将部分提交从默认分支(不是所有文件和其他文件的一部分)合并到命名分支。我试过graft了,但它只需要整个提交而没有给我选择的机会。这将如何完成?

例子:

A---B---C---D
      \
       -E---(G)

G还不存在。可以说CD每个添加 5 个文件并修改 5 个文件。我想G在 5 个文件中添加 2 个,C其中一个文件的所有修改和另一个文件的一个修改。理想情况下,我希望它也有类似的东西D

当我选择 时graft to local...,我得到的只是整个C变更集。相同的merge with local...

4

1 回答 1

6

合并的单位是一个完整的变更集,所以 C 和 D 应该被提交成更小的部分。您现在可以合并整个文件并还原一些文件,但这将导致您以后无法合并其余文件——它们已被视为已合并。

我要做的是创建一个与 CD 平行的分支,在您的示例中以 B 为根,其中包含 C 和 D 中更改的副本,但将它们拆分为连贯的部分。然后,您可以从中合并整个变更集,并关闭(或者甚至删除)原始 CD 分支。

      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

如果重新排序新的变更集不是一个选项,你必须做一些花哨的跳动来按 C1、D1、C2、D2 的顺序提交部分变更集;使用graft(或transplant)复制不允许单独合并的更改可能会少很多麻烦。例如,在下面您仍然可以合并 C1,但是您需要 D1 的副本(标记为 D1'),因为如果不将 C2 与它一起拉动,就无法合并它。

      C---D
     / 
A---B--C1--C2--D1--D2
     \  \
      E--G1--D1'
于 2013-06-12T17:45:34.213 回答