2

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

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

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

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

4

2 回答 2

1

在 Mercurial 中,您可以将变更集从一个地方hg graft复制(有时也称为樱桃挑选)到另一个地方。当错误修复意外提交到错误的分支时,它经常用于将错误修复反向移植到维护分支。

你像这样使用它:

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

这将重新创建your-commit为 的子项correct-branch,类似于导入your-commitMQ、弹出补丁、更新correct-branch和推送补丁。嫁接的优点是它会在内部使用三向合并来为您提供更好的冲突解决方案。这确实是一样的hg rebase工作方式。

于 2014-04-16T07:30:54.820 回答
0

我想将 torek 的评论推广为完整的答案,以使其更加明显。

正如他所指出的,hg phase当 mercurial 认为变更集已公开时,该命令(带有 --force 标志)可以修复这种情况。当然,您要非常确定您是否首先共享它是正确的。

我遇到了一个小故障,mercurial 将未推送的分支标记为公共,这使得使用 qimport 修复很容易(或者可以使用 strip。)

于 2014-07-01T22:23:45.840 回答