Mercurial:退出公共变更集并重新申请新的公共分支机构?

时间:2014-04-15 19:01:43

标签: git mercurial rebase kiln hg-git

我们正在使用Kiln和Fogbugz;窑应该无缝地允许git和hg一起工作。但是,我们遇到了一个问题,即git分支被视为mercurial中的书签;我们没有在我们的回购中发现这一点,直到改变被推动,现在分支有点被污染。

我的默认分支中有公共更改集,应该位于自定义分支中。我可以支持它们,但我需要将它们重新应用到其他公共分支机构。我担心变基,因为这些是公共变化。

处理这种情况的最佳方法是什么?

编辑:我认为我可以使用mercurial队列将变更集转换为补丁,但变更集并不可变,因为它们是公开的。出于类似的原因,我也不能做hg strip。

2 个答案:

答案 0 :(得分:0)

在Mercurial中,您使用hg graft将变更集(有时也称为 cherry pick )从一个地方复制到另一个地方。当错误修复在错误的分支上意外发生时,它经常被用于向错误修复程序反向移植。

你这样使用它:

$ hg update correct-branch
$ hg graft your-commit

这会将your-commit重新创建为correct-branch的子项,类似于将your-commit导入MQ,弹出补丁,更新为correct-branch并推送补丁。移植的优势在于它将在内部使用三向合并来为您提供更好的冲突解决方案。它与hg rebase的工作方式非常相似。

答案 1 :(得分:0)

我想宣传torek对完整答案的评论,以使其更加醒目。

正如他所指出的,当mercurial认为变更集已公开时,hg phase命令(带有--force标志)可以修复这种情况。当然,你想确定你是否先被分享是对的。

我遇到了一个故障,其中mercurial标记为未公开的分支,这使得使用qimport很容易修复(或者可以使用条带。)