[牛角尖]用hg-rebase仅挪动一个branch的最旧一部分 – 改

前一段时间入门hg时碰到了这么一个问题,当时还写了一篇文:

[牛角尖]用hg-rebase仅挪动一个branch的最旧一部分

当时我就觉得这一操作感觉异常繁琐,应该还有改进的余地,今天无意中果然发现了改进的方法:

1、上次我在第一步时使用了这个命令:

hg rebase -s 2 -d default --keep

图三

“-s 2″ 参数将版本2开始的整个分支都rebase了,应该改用”-r 2″,这样将仅rebase版本2,而3和4不变。因此我们看到在图三(上图)中的版本6和7就不会出现。另外还有一点,因为默认是rebase到当前分支,所以如果当前是在default上,那”-d default”也可以省了。

改进后的版本如下:

hg rebase -r 2 --keep

2、然后,直接使用如下的rebase命令:

hg rebase -b dev --keepbranch

图二

这次直接使用了-b而非-s,换句话说也就是连版本2一起整个rebase了上去,所以–detach也就没有必要了(事实上如果不用-s也不可以用–detach)。然后神奇的事情发生了,因为版本5和版本2的changeset相同,default直接fastforward上去了,于是这次只用了2个命令就完成了这一转移,同时也避免了使用非常危险的strip~