水银:在一个回购合并分支之间的一个文件(Mercurial: Merging one file be

2019-06-24 22:00发布

当我在汞回购两个分支,如何合并只有一个文件与另一个分支,而不必从变更的所有其他文件合并?

是否有可能进行合并,而不是整体变更的某些文件,?

Answer 1:

警告:这样的“虚拟合并”,如由@Martin_Geisler建议,才能真正惹你了,如果以后你想要做的两个分支的真正融合。 伪合并将被记录下来,并说你融入你做的假人合并到分支 - 你不会看到的变化。 或者,如果合并到另一个分支,在该分支其它的变化将被撤消。

如果你想要的是从一个分支拷贝整个文件到另一个,你可以简单地做:

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

如果你想选择一个文件的不同部分,然后"hg record"是有益的。

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

如果两个分支已经修改了,你要保持一个文件,一个肮脏的伎俩是使用汞合并创建的两个分支的合并,可能/可能对另一个分支,请检查,然后再复制一个文件合并和以分支之间:

   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 update -r Where-you-want-to-copy-to
   hg revert -r Where-you-want-to-copy-from file-you-want-to-copy
   ...
   hg ci

出于某种原因,我和我的一些同事,觉得这混乱。 “恢复” ==“复制” ......有道理的某些使用模式,但不是全部。



Answer 2:

不。 水银工作的变更的基础上。

但是你可以做一个“ 虚拟合并 ”在这里你忽略的一个分支引入的变更。 在您承诺,那么你可以恢复选定的文件到任何你想要的状态:

% 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.'

也许这将帮助你一点。



Answer 3:

我只想用一个外部工具,如vimdiff到diff的,我要合并,然后将它们合并这两个文件。 这样做的好处是,你可以在文件的各个部分做选择性的编辑。 例如:

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

要做到这一点,你需要确保您的.hgrc,这只是意味着增加这些线路的外部工具:

[extensions]
hgext.extdiff =  


文章来源: Mercurial: Merging one file between branches in one repo