Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Merge 如何只合并一些文件?_Merge_Mercurial_Tortoisehg - Fatal编程技术网

Merge 如何只合并一些文件?

Merge 如何只合并一些文件?,merge,mercurial,tortoisehg,Merge,Mercurial,Tortoisehg,我正在尝试将提交的一部分从默认分支(不是所有文件和其他文件的一部分)合并到命名分支。我尝试了嫁接,但它只需要整个提交过程,而没有给我选择的机会。如何做到这一点 例如: A---B---C---D \ -E---(G) G尚不存在。假设C和D分别添加了5个文件和修改了5个文件。我希望G在C添加5个文件中的2个,对其中一个文件进行所有修改,对另一个文件进行一次修改。我希望它也能有类似于D的东西 当我选择了graft to local…时,我得到的只是整个C变更集。与本地合

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

例如:

A---B---C---D
      \
       -E---(G)
G
尚不存在。假设
C
D
分别添加了5个文件和修改了5个文件。我希望
G
C
添加5个文件中的2个,对其中一个文件进行所有修改,对另一个文件进行一次修改。我希望它也能有类似于
D
的东西


当我选择了
graft to local…
时,我得到的只是整个
C
变更集。与本地合并相同。

合并的单位是一个完整的变更集,因此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
如果对新的变更集重新排序不是一个选项,那么您必须进行一些花式的tappdancing,以按顺序C1、D1、C2、D2提交部分变更集;使用
移植
(或
移植
)复制不允许单独合并的更改可能会省去很多麻烦。例如,在下面的示例中,您仍然可以合并C1,但是您需要D1(标记为D1')的副本,因为如果不将C2一起拉,就无法合并它

      C---D
     / 
A---B--C1--C2--D1--D2
     \  \
      E--G1--D1'

据我所知,Mercurial本身不支持这种选择性合并。您可以做的是执行正常合并,然后还原不希望合并的文件,并手动更改要部分合并的文件。最后,提交合并。@瞧,这是从一个分支到另一个分支修复bug的标准方法吗?我认为这将是一个常见且受支持的场景,不是吗?这不是标准,甚至不推荐。当然,最佳实践要求bug修复应该是它自己的变更集,所以您不必挑选单个文件。如果是的话,你可以使用嫁接(或者只是合并,如果默认分支中只有bug修复的话)。这能回答你的问题吗?