我们有两个脑袋。一个是我们的主要开发负责人,另一个是我忘记了直到今天。我们发现了一个错误并将其修复到我们的主要开发分支中,我刚刚意识到它应该在旧分支中修复。
我认为在旧分支上进行更改并将其与最新分支合并会更好,但我们并没有这样做。 mercurial可以处理这个吗?我们没有尝试过这样的事情,我无法真正理解它将如何完成。
答案 0 :(得分:14)
是的,你有两个不错的选择:
此版本引入了graft command,它可以以智能方式向后端口进行更改。 “智能”是它将在内部使用合并,这意味着你得到
支持重命名:想象一下,您修复了开发分支上文件foo.c
中的错误。在较旧的维护分支foo.c
中称为bar.c
。使用hg graft
,foo.c
的更改可以正确合并到旧版bar.c
。
三向合并:嫁接涉及twisting the graph around并合并到该临时图表中。三向合并的优点是您可以使用常规图形合并工具来解决冲突。
要将default
的提示复制到old-branch
,您只需运行
$ hg update old-branch
$ hg graft default
在我们接受移植命令之前,transplant extension是可行的方法。这个简单的扩展将导出一个变更集作为补丁,并尝试将补丁应用到其他一些版本。
因为我们正在处理“哑”补丁,所以不会考虑重命名之类的内容,因为没有三向合并,所以你不会得到你的合并工具的支持。尽管如此,我发现移植在实践中非常有效。
使用移植很简单:
$ hg update old-branch
$ hg transplant default
这非常接近于
$ hg update old-branch
$ hg export default | hg import -
除了移植还添加了一段元数据,这些元数据记录了移植变更集中的原始变更集。这可以用来跳过未来的移植。