这是一个难以解释的情况,所以请耐心等待.我有一个Mercurial存储库,有2个主要分支,默认和开发.
工作通常在dev(特征分支)的命名分支中完成.任何时候都可能有许多功能分支.一旦在该分支中完成工作,它就会合并回dev.
当准备发布时,另一个命名分支是从dev(发布分支)创建的.有时需要从发布中排除整个功能.如果是这种情况,则将功能分支合并到dev中的合并更改集从新版本分支中退出.
一旦发布分支准备好发布,它就会合并为默认值(因此默认情况下始终代表生产中代码的状态).在dev分支和功能分支上正常工作.
当需要执行另一个版本时,会出现问题,包括在先前版本中退出的功能.正常创建新的发布分支(脱离开发).此新版本分支现在包含从先前版本分支退出的功能(因为退出是在发布分支上执行的,并且合并更改集仍保留在dev分支上).
这次,当发布分支准备好发布并合并为默认值时,由于先前版本分支中的合并回退而退出的任何更改都不会合并为默认值.为什么会这样?由于新版本分支包含所有功能分支变更集(没有任何内容被撤消),为什么默认分支也不会收到所有这些变更集?
如果以上所有内容都难以理解,这里是TortoiseHg的截图,显示了基本问题."branch1"和"branch2"是功能分支,"release"和"release2"是发布分支:

我是mercurial的新手,我读到只能从另一个分支合并一个单独的变更集.然后我不知道解决这个问题的最佳方法是什么:
什么是最好的方法?由于合并不起作用,我所做的是制作一个CS2补丁,然后在新的稳定分支中应用补丁来修复错误.那是Mercurial的方式吗?
干杯,
我们有两个脑袋.一个是我们的主要开发负责人,另一个是我忘记了直到今天.我们发现了一个错误并将其修复到我们的主要开发分支中,我刚刚意识到它应该在旧分支中修复.
我认为最好在旧分支上进行更改并将其与最新分支合并,但我们并没有这样做.mercurial可以处理这个吗?我们还没有尝试过这样的事情,我无法真正理解它将如何完成.
我有一个mercurial存储库,有两个永久分支,默认和UAT.每隔一段时间,我们就会将新版本的应用程序部署(推广)到UAT环境中,我们通过将稳定的默认提交合并到UAT分支来实现.偶尔会在UAT分支中修复错误,这些错误修复会合并回默认值.
在UAT分支上,我需要为部署目的更改一些内容 - 连接字符串和各种环境设置.我试图做的是使在UAT分支这些变化,并承诺他们(所有为一个承诺),其合并成默认UAT之后.然后我将这一个提交虚拟合并到默认值 - 想法是因为默认现在在它的祖先中有这个提交将来错误修复从UAT合并到默认值将不会尝试重做这些特定于UAT的更改.
然而事情并没有像我希望的那样顺利.从虚拟合并提交开始到默认情况,我尝试了以下两种情况:
1) Make a few more commits to default and then "promote" to UAT (merge default onto UAT)
2) Make a bugfix on UAT and "backport" it to default (merge UAT onto default)
Run Code Online (Sandbox Code Playgroud)
在运行#1和#2之间,我已经将所有内容都删除,以便两个场景都从同一点开始.
我所看到的是,根据合并的最后一个方向,我仍然需要在执行一个或另一个合并并恢复之后检查已更改的文件 - 有时合并会尝试将默认配置放入UAT,有时将UAT配置放入合并.
如果我恢复配置更改并提交合并,那么将来在同一方向上的合并行为正常,但是当我走向另一个方向时,合并再次将错误的配置放入文件中.
我错过了什么?