您可以使用它hg cat
来获取任何特定分支上存在的文件内容,并用该文件替换工作副本版本。
从技术上讲,这不是合并,但是由于您要替换整个文件,因此以后合并内容应该不会有太多麻烦:
例如,要获取myfile.c
form branch somefeature
并替换工作副本版本,请执行以下操作:
hg cat path/to/myfile.c -r somefeature > path/to/myfile.c
Run Code Online (Sandbox Code Playgroud)
请注意,这将完全替换工作副本文件,因此请确保您没有任何未完成的更改
据我所知,Mercurial 没有任何工具来分割变更集。如果幸运的话,您想要的所有更改都位于单独的更改集中,然后您可以使用TransplantExtension。我认为它可以与 Git 的cherry-pick 相比较,但我并没有太多使用 git。
您还可以使用 hg diff 手动将对某个文件的更改提交到新分支。使用转速范围来标记整个源分支:
hg diff myfile -r startrevision:endrevision
Run Code Online (Sandbox Code Playgroud)
输出可以被视为补丁。对您想要的每个文件执行此操作并提交它们,然后合并。跳过破坏性的变化。当然,您也可以在修订范围的中间多次进行破坏性更改。
话虽如此,你想要做的事情并不是 Mercurial 的初衷。核心历史编辑更多的是 Git 的领域(请注意,这只是我的观点)。将稳定的更改和破坏性的更改保留在单独的变更集中(甚至可能在单独的分支中)。我使用移植、变基和剥离来移动更改。全部完成后,它们将被合并并正确推送。
哦,检查MercurialQueues。我自己没有使用过它,但我见过它做了一些疯狂的事情。也许它能够按照您想要的方式做一些事情。