【问题标题】:In Mercurial, can I merge just some files between two branches? [duplicate]在 Mercurial 中,我可以只合并两个分支之间的一些文件吗? [复制]
【发布时间】:2011-11-07 16:30:52
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mercurial merge


    【解决方案1】:

    是的,Mercurial 总是对整棵树进行分支和合并。你没有像perforce 这样的“灵活性”让你选择单个文件进行合并。这是一件好事(相信我)。变更集是原子的(你不能拆分它们)和不可变的(你不能改变它们)。因此,这需要稍微改变一下心态。

    变更集应针对一项任务,并且仅针对一项任务。如果您正在修复错误,那么除了错误修复之外,变更集中没有其他内容。然后,您获得了一个变更集,其中记录了该错误修复,并且您没有想要拆分它的问题。想要这样做是没有意义的。半个错误修复通常比没有错误修复更糟糕。

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

    • 一种观点认为,您应该回到引入错误的地方。修理它。提交(创建一个小的匿名分支),并将其合并到您想要的任何头部(开发、稳定、发布等)。不过,这并不总是实用的。
    • 另一种方法是修复发布分支的bug,然后合并到开发分支。这通常效果很好。
    • 或者,您可以在开发分支的头部修复它,但是如果您将它合并到您的发布分支,您将带来所有开发更改。这就是graft (new in 2.0) 和旧的transplant 扩展发挥作用的地方。它们允许您从另一个分支“挑选”单个或一系列变更集并将它们放在另一个分支上。

    【讨论】:

    • 区分错误修复进入发布分支确实让我有一个实现的时刻。谢谢。
    【解决方案2】:

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

    是的

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

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

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

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

    【讨论】:

    • 谢谢,我不知道变更集和分支可以合并。如果我只想要给定变更集上的一些文件,或者来自多个变更集的一些文件怎么办。 (如果每个修复都分开很好,但现实生活并不总是很好)
    • 无法使用变更集中的某些文件 - 您总是完整的变更集应用到另一棵树。要更改 repo 中的变更集(无论如何都是不好的方式),您可以拆分合并它(mq、histedit)或导出为补丁、编辑、应用,例如
    • “只需触摸所需变更集中的“一些文件”,然后将分支与该变更集合并”——这不是 Mercurial 的工作方式,至少在 2022 年是这样。另一个分支中的每个更改直到选定的提交将被合并,而不仅仅是所选提交中涉及的文件。
    猜你喜欢
    • 2010-11-07
    • 2018-12-22
    • 2018-11-15
    • 2011-04-21
    • 2013-03-20
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多