Mercurial:在一个回购合并分支之间的一个文件

当我在Hg repo中有两个分支时,如何合并只有一个文件与另一个分支,而不是所有其他文件从变更集合?

是否有可能只合并某些文件,而不是整个变更集?

警告:像@Martin_Geisler推荐的那样,这样的“虚拟合并”真的可能会把你搞乱,如果以后你想做两个分支的合并。 虚拟合并将被logging,并说你合并到你做虚拟合并的分支 – 你不会看到变化。 或者,如果您合并到另一个分支,则其他分支上的更改将被撤消。

如果您只想将整个文件从一个分支复制到另一个分支,您可以简单地执行:

hg update -r to-branch hg revert -r from-branch file hg ci -m 'copied single file from from-branch to to-branch 

如果你想select文件的不同部分,那么"hg record"是有用的。

我只是在我的主目录.hgignore上做了这个。

如果两个分支都修改了一个你想保留的文件,一个肮脏的技巧就是使用hg merge合并两个分支,可能/可能在另一个分支上,检查in,然后复制一个文件合并和分行之间:

  hg update -r to-branch branch merge-branch hg merge -r from-branch hg ci -m 'temp merge to be discarded" hg update -r to-branch hg revert -r merge-branch single-file hg ci -m 'merged single-file from from-branch to to-branch" hg strip merge-branch 

值得一提的是:“在分支之间复制单个文件”(或修订版本,或从修订版本到合并,或….)的方式是“hg revert”。 即

  hg update -r Where-you-want-to-copy-to hg revert -r Where-you-want-to-copy-from file-you-want-to-copy ... hg ci 

出于某种原因,我和我的一些同事发现这非常混乱。 “恢复”==“复制”…对于一些使用模式有意义,但不是全部。

不。 Mercurial在变更的基础上工作。

但是,您可以在其中忽略来自其中一个分支的传入更改的情况下执行“ 虚拟合并 ”。 在提交之前,您可以将选定的文件恢复到您想要的任何状态:

 % HGMERGE=internal:local hg merge # keep my files % hg revert --rev other-branch a.txt # update a.txt to other branch % hg commit -m 'Dummy merge to pick a.txt from other-branch.' 

也许这会帮助你一点。

我只是使用像vimdiff这样的外部工具来vimdiff我想要合并的两个文件,然后合并它们。 这样做的好处是你可以对文件的一部分进行select性编辑。 例如:

 hg update -r branch-merging-to hg extdiff -p vimdiff -r branch-merging-from file-I-am-merging 

要做到这一点,你需要启用.hgrc中的外部工具,这意味着添加这些行:

 [extensions] hgext.extdiff =