我们有两个头。一个是我们的主要开发负责人,另一个是我直到今天才忘记的那个。我们发现了一个错误并在我们的主要开发分支中修复了它,我刚刚意识到它也应该在旧分支中修复。
我认为在旧分支上进行更改并将其与最新分支合并会更好,但我们没有这样做。水银能处理这个吗?我们还没有尝试过这样的事情,我也无法真正理解它是如何完成的。
我们有两个头。一个是我们的主要开发负责人,另一个是我直到今天才忘记的那个。我们发现了一个错误并在我们的主要开发分支中修复了它,我刚刚意识到它也应该在旧分支中修复。
我认为在旧分支上进行更改并将其与最新分支合并会更好,但我们没有这样做。水银能处理这个吗?我们还没有尝试过这样的事情,我也无法真正理解它是如何完成的。
是的,您有两个不错的选择:
该版本引入了graft 命令,可以智能地反向移植更改。“智能”是它将在内部使用合并,这意味着你得到
支持重命名:假设您修复foo.c
了开发分支上文件中的错误。在较旧的维护分支foo.c
中被调用bar.c
。使用hg graft
,更改foo.c
可以正确合并到旧bar.c
。
三向合并:嫁接涉及扭曲图形并在该临时图形中合并。三向合并的优点是您可以使用普通的图形合并工具来解决冲突。
要将提示复制default
到old-branch
您身上,只需运行
$ hg update old-branch
$ hg graft default
在我们有移植命令之前,移植扩展是要走的路。这个简单的扩展会将变更集导出为补丁,并尝试将补丁应用到其他版本。
因为我们正在处理“哑”补丁,所以不会考虑重命名之类的事情,并且您将不会获得对您的合并工具的支持,因为没有三向合并。尽管如此,我发现移植在实践中效果很好。
使用移植很简单:
$ hg update old-branch
$ hg transplant default
这非常接近运行
$ hg update old-branch
$ hg export default | hg import -
除了移植还在移植的变更集中添加了一条记录原始变更集的元数据。这可以用来跳过未来的移植。