Mercurial - 如何合并多个文件被删除的两个头?

时间:2017-06-23 16:14:48

标签: merge mercurial

我正在使用一台有两个头的机器:默认和测试。 Test是一段时间以前默认创建的分支。不久前,从测试中删除了数千个文件。测试中的文件也有很多变化。所有这些在测试中删除或更改的文件也是默认的。我想合并两个头,以便所有在测试中更改的文件保持不变,但所有已删除但仍处于默认状态的文件都会被添加。

当我合并时,它让我一个接一个地决定是否保留已删除的文件: 本地更改了远程删除的a / b.txt 使用(c)吊死版本或(d)elete?

我不介意手动合并文件中的差异,但我不想按c数千次删除文件......

1 个答案:

答案 0 :(得分:0)

根据您的具体情况,可以在此处使用:local(或:other)合并工具。

请注意,这会严重影响一个或其他父级(p1或p2)的冲突文件,因此与:merge-local:merge-other非常不同。也就是说,如果您在分支default上并且正在合并分支test,则在两个分支中修改文件both.txt(相对于合并基础版本),则:

hg merge --tool :local

将完全放弃both.txt中的test更改,仅从both.txt获取default更改。 (如果仅在test.txt中修改了其他文件test,Mercurial将会进行这些更改。)

但是,如果所有其他方法都失败了,您可以在类Unix系统上使用以下技巧模拟输入c到每个提示符(我不知道它是否适用于Windows):

yes c | hg --config ui.interactive=true merge test

通常情况下,如果hg的输入来自管道(在这种情况下:yes c打印一个由c组成的无限行序列),则不会尝试从标准输入读取(因此它就像你在每个提示中键入u一样)。但是,将ui.interactive设置为true会强制Mercurial从stdin读取。

如果您愿意,可以将其与--tool :merge-local--tool :merge-other结合使用。