在Mercurial中,我可以在两个分支之间合并一些文件吗?

时间:2011-11-07 16:30:53

标签: mercurial merge

阅读Mercurial,似乎总是分支并合并完整的存储库。

是否可以将一些文件从一个分支合并到另一个分支? (例如,我可能只希望合并修复给定错误的文件。)

同样我可以选择一些更改集,但仍然有一个正确的合并记录,所以如果我完成合并后来完成它是正确的吗?

我来自一种强大的“心态”,所以可能会以错误的方式思考这个问题。

2 个答案:

答案 0 :(得分:8)

是的,Mercurial总是分支并合并整个树。您没有perforce之类的“灵活性”可以为合并选择单个文件。这是一件好事(相信我)。变更集是原子的(你不能拆分它们)和不可变的(你不能改变它们)。因此,这需要一点心态变化。

变更集应针对一项任务,仅针对一项任务。如果您正在修复错误,除了错误修复之外,更改集中没有任何其他内容。然后你有一个变更集来记录这个bug修复,你没有想要拆分它的问题。想要没有意义。错误修复的一半通常比没有错误修复更糟糕。

当谈到合并时,有几个选择:

  • 一派思想说你应该回到引入bug的地方。修理它。提交(创建一个小的匿名分支),并将其合并到你想要的任何头上(开发,稳定,发布,等等)。但这并不总是切实可行。
  • 另一种方法是修复发布分支中的错误,然后合并到开发分支。这通常很有效。
  • 或者你可以将它修复到开发分支的头部,但是如果你将它合并到你的发布分支,你将带来所有的开发变更。这是graftnew in 2.0)和较早的transplant扩展程序发挥作用的地方。它们允许您从另一个分支“挑选”一个或一系列变更集,并将它们放在另一个分支上。

答案 1 :(得分:3)

  

阅读Mercurial,似乎总是分支和合并   完整的存储库。

  

是否可以将一些文件从一个分支合并到另一个分支? (例如,我可能只希望合并修复给定错误的文件。)

只需触摸所需变更集中的“某些文件”,并将此变更集合并分支到另一个分支或移植到任何时间

  

同样我可以选择一些更改集,但仍然有一个正确的合并记录,所以如果我完成合并后来完成它是正确的吗?

是的,你可以移植|任何更改集到另一个分支,将记住应用状态,并且最终合并时不会重复更改