Mercurial Rebase场景

时间:2011-01-01 11:34:02

标签: mercurial rebase

我已阅读RebaseProject页面并尝试了一个非平凡的例子 (不是改变一个完整的分支)。它与 rebase D on的情况类似 我是场景B的

以下是rebase之前的情况:

default : 0 ----- 2
            \
feature :     1 ----- 3

现在我想在3上重新2,给予:

default : 0 ----- 2 ----- 3
            \
feature :     1

不幸的是RebaseProject中没有给出确切的命令 页面,但从我对用法概要的理解应该是:

hg rebase --source 3 --dest 2

但不知何故,我的理解必定是有缺陷的,因为我得到了一个与合并相结合的基础:

default : 0 ----- 2 ----- 3
            \           /
feature :     1 -------

为什么?

重现场景的命令:

hg init
touch a
hg add a
hg commit -m "added a"
hg branch feature
touch b
hg add b
hg commit -m "added b on feature"
hg up -C default
touch c
hg add c
hg commit -m "added c on default"
hg up -C feature
echo "feature" >> a
hg commit -m "changed a on feature"
hg rebase --source 3 --dest 2

1 个答案:

答案 0 :(得分:3)

您的方案与Rebase Project方案的rebase G onto I部分scenario B非常相似:

  

情景B
  ......

     

scenario B originally
  ......

     

将G重新加入I

     

rebase G onto I

在您的方案中,D == 1I == 2G == 3。重新定位后,3维持与1的关系,就像G'保持与D的关系一样。这是因为D I的祖先,并且:

  

注意:仅当父级是目标的祖先时,Rebase才会删除父关系。

您真的想删除该关系,然后,根据文档,您需要开发版来获取--detach选项:

  

使用开发版本可以使用新的--detach选项来删除此关系。

     

new --detach option