在Mercurial中,如何从命名分支中选择特定文件以合并为默认值?

Ryg*_*ygu 7 merge mercurial branch file

我有一个很大的命名分支,有很多变化.其中一些更改是非破坏性的,因此我想首先选择这些特定文件,并尽快将它们与默认值合并.(后来,破坏性的变化也被合并了.)

在Git中,我将创建另一个分支并压缩索引之外的所有变更集,然后我将特定文件添加到索引并提交.之后,我可以将此临时分支与master合并,因此master具有干净的提交,只有非破坏性的更改.我不知道如何用Mercurial做到这一点.

Jam*_*mes 5

您可以使用它hg cat来获取任何特定分支上存在的文件内容,并用该文件替换工作副本版本。

从技术上讲,这不是合并,但是由于您要替换整个文件,因此以后合并内容应该不会有太多麻烦:

例如,要获取myfile.cform branch somefeature并替换工作副本版本,请执行以下操作:

hg cat path/to/myfile.c -r somefeature > path/to/myfile.c
Run Code Online (Sandbox Code Playgroud)

请注意,这将完全替换工作副本文件,因此请确保您没有任何未完成的更改


Miz*_*zor 2

据我所知,Mercurial 没有任何工具来分割变更集。如果幸运的话,您想要的所有更改都位于单独的更改集中,然后您可以使用TransplantExtension。我认为它可以与 Git 的cherry-pick 相比较,但我并没有太多使用 git。

您还可以使用 hg diff 手动将对某个文件的更改提交到新分支。使用转速范围来标记整个源分支:

hg diff myfile -r startrevision:endrevision
Run Code Online (Sandbox Code Playgroud)

输出可以被视为补丁。对您想要的每个文件执行此操作并提交它们,然后合并。跳过破坏性的变化。当然,您也可以在修订范围的中间多次进行破坏性更改。

话虽如此,你想要做的事情并不是 Mercurial 的初衷。核心历史编辑更多的是 Git 的领域(请注意,这只是我的观点)。将稳定的更改和破坏性的更改保留在单独的变更集中(甚至可能在单独的分支中)。我使用移植变基剥离来移动更改。全部完成后,它们将被合并并正确推送。

哦,检查MercurialQueues。我自己没有使用过它,但我见过它做了一些疯狂的事情。也许它能够按照您想要的方式做一些事情。