如果在不同的分支上,为什么我不能重新设置源变更集的祖先?

时间:2010-11-10 14:56:37

标签: mercurial rebase

我想知道为什么以下模式不可能。

创建了一个本地特征分支(minor_feature - 不打算与世界共享)我想将它的工作重新定义到一个众所周知的分支(稳定)的尖端。但是我发现,在自从分支离开稳定之后没有进展的情况下,rebase没有发现任何重新定位的东西。

我理解这违反了规则,即rebase的目的地不能成为源的祖先,但无法解决为什么在所示的简单情况下应该禁止这一点。我也明白,除了分支外,拓扑在rebase期间实际上不会发生变化。但鉴于分支名称对拓扑结构确实很重要,它似乎只是一个特殊情况,因为stable没有进一步的修改。在稳定的尖端进行一次额外的修改(比如从其他地方拉进来)我当然可以执行rebase

o  branch:minor_feature
|  rev:4
|  changeset:746d8191aa5d
|
o  branch:minor_feature
|  rev:3
|  changeset:520f565ba7f2
|
@  branch:stable
|  rev:2
|  changeset:64e7c753c090
|
o  branch:stable
|  rev:1
|  changeset:3dc55a5c9971
|
o  branch:stable
   rev:0
   changeset:fbf1f426945c

$hg rebase -b minor_feature
nothing to rebase

- 谢谢 克里斯戈尔曼

2 个答案:

答案 0 :(得分:1)

Rebase严格用于更改变更集的祖先。正如你所观察到的,你并没有在这里改变祖先。分支不包括在祖先计算中。

我不是100%肯定你想要完成的事情。如果要有效地删除分支,那么只要你没有推动,你就可以使用MQ扩展。导入变更集,全部弹出。确保您已更新到稳定分支(默认情况下应该更新),并将其全部重新打开。

他们现在应该都在稳定的分支上。

答案 1 :(得分:0)

您可以使用convert extension执行此操作。您可以使用分支图将minor_feature重新定位到default。该文件(我们将其称为alldefault)看起来像这样:

minor_branch default

然后命令就是:

$ hg convert --branchmap alldefault oldrepo newrepo

当它完成时,newrepo将在default分支的顶部“更新”命名分支。