11

我们有两个头。一个是我们的主要开发负责人,另一个是我直到今天才忘记的那个。我们发现了一个错误并在我们的主要开发分支中修复了它,我刚刚意识到它也应该在旧分支中修复。

我认为在旧分支上进行更改并将其与最新分支合并会更好,但我们没有这样做。水银能处理这个吗?我们还没有尝试过这样的事情,我也无法真正理解它是如何完成的。

4

1 回答 1

14

是的,您有两个不错的选择:

嫁接:Mercurial 2.0 中的新功能

该版本引入了graft 命令,可以智能地反向移植更改。“智能”是它将在内部使用合并,这意味着你得到

  • 支持重命名:假设您修复foo.c了开发分支上文件中的错误。在较旧的维护分支foo.c中被调用bar.c。使用hg graft,更改foo.c可以正确合并到旧bar.c

  • 三向合并:嫁接涉及扭曲图形并在该临时图形中合并。三向合并的优点是您可以使用普通的图形合并工具来解决冲突。

要将提示复制defaultold-branch您身上,只需运行

$ hg update old-branch
$ hg graft default

移植:旧版本

在我们有移植命令之前,移植扩展是要走的路。这个简单的扩展会将变更集导出为补丁,并尝试将补丁应用到其他版本。

因为我们正在处理“哑”补丁,所以不会考虑重命名之类的事情,并且您将不会获得对您的合并工具的支持,因为没有三向合并。尽管如此,我发现移植在实践中效果很好。

使用移植很简单:

$ hg update old-branch
$ hg transplant default

这非常接近运行

$ hg update old-branch
$ hg export default | hg import -

除了移植还在移植的变更集中添加了一条记录原始变更集的元数据。这可以用来跳过未来的移植。

于 2012-04-24T07:22:09.040 回答