我有一个很大的命名分支,有很多变化。其中一些更改是非破坏性的,因此我想首先选择这些特定文件,并尽快将它们与默认值合并。 (之后,破坏性的变化也会被合并。)
在Git中我会创建另一个分支并压缩索引之外的所有变更集,然后我将特定文件添加到索引并提交。之后,我可以将此临时分支与master合并,因此master具有干净的提交,只有非破坏性的更改。我不知道如何用Mercurial做到这一点。
答案 0 :(得分:4)
我认为mercurialqueues就是你想要的。使用mq,您可以将任何变更集转换为补丁,并将任何补丁转换为变更集。因此,将变更集转换为修补程序,将修补程序中的块删除,然后将其应用到您想要的任何分支。这是一项相当complex的操作,但您需要一定程度的纪律。因此,在尝试使用您关心的代码之前,我会尝试在测试回购中确定您的工作流程。
答案 1 :(得分:4)
您可以使用hg cat
获取任何特定分支上存在的文件内容,并将其替换为工作副本版本。
这在技术上并不是一个合并,但是因为你要替换整个文件,所以以后合并时不应该有太多不好的时间:
例如,要抓取myfile.c
表单分支somefeature
,并替换工作副本版本,请执行:
hg cat path/to/myfile.c -r somefeature > path/to/myfile.c
请注意这完全取代了工作副本文件,因此请确保首先没有未完成的更改
答案 2 :(得分:1)
据我所知,Mercurial没有任何工具来拆分变更集。如果幸运的话,您想要的所有更改都在单独的更改集中,然后您可以使用TransplantExtension。我认为它可以与Git的樱桃挑选相提并论,但我并没有使用git。
您还可以使用hg diff手动将对某个文件的更改提交到新分支。使用rev范围标记整个源分支:
hg diff myfile -r startrevision:endrevision
可以将输出视为补丁。为您想要的每个文件执行此操作并提交它们然后合并。跳过破坏性的变化。当然,您也可以在修订范围的中间进行多次破坏性更改。
说完了你想要做的事情并非为mercurial所做的事情。那个硬核历史编辑更多是Git的区域(注意它只是我的意见)。在单独的变更集中(甚至可能在单独的分支中)保持稳定的变化和破坏性变化。我使用transplant,rebase和strip来移动更改。完成所有操作后,它们会被合并并正确推送。
哦,然后检查MercurialQueues。我自己没有使用它,但我看到它做了一些疯狂的事情。也许它能够按照你想要的方式做一些事情。