Rebase功能分支以避免合并

时间:2013-08-09 08:51:06

标签: mercurial rebase

我有默认分支,它是公共的,而功能分支是私有的。

default 1-----4-------8
         \     \
feature   2-3---5-6-7

当我对默认值进行更新时,我希望它们可用于功能分支。 我可以通过重复合并来做到这一点,但后来我最终会有很多合并。 编辑历史记录没有问题;功能分支仅在我的本地 库中。

我想这样做:

default 1-----4-8
         \       \
feature   2-3-----5-6-7

甚至更好:

default 1-4-8
             \
feature       2-3-5-6-7

我试着这样做:

hg rebase --dest 8 --source 5

但它将元素移动到错误的分支。

default 1-----4-8-5-6-7
         \       /
feature   2-3----

分支在不同文件中有变化,因此无需担心复杂的合并。

修改

--keepbranches选项似乎在表面上做了我想做的事情。但合并提交信息似乎很奇怪:就像MercurialHg认为它仍然是默认分支,但只是重命名为feature -branch。这似乎是一种破解,我并不是100%确信这是要走的路。

1 个答案:

答案 0 :(得分:1)

我认为您的工作流程比使用rebase更适合使用Mercurial Queues

原因是,当它曾经是1时,将分支的父级更改为8并不是一件微不足道的事情,但这正是使用MQ时的效果。

Mercurial队列保留一组补丁,每个版本都有一个补丁,并且在您完成功能的同时,可以根据需要轻松应用/取消应用。

在您的方案中,您将执行以下操作:

  1. 创建第一个包含变更集2的修补程序。
  2. 创建第二个补丁以包含变更集3。
  3. 删除所有修补程序
  4. pull changeset 4
  5. 应用所有修补程序
  6. 为变更集5创建补丁
  7. 为变更集6创建补丁
  8. 为变更集7创建补丁
  9. 删除所有修补程序
  10. 拉变换集8
  11. 应用所有修补程序
  12. 这将最终出现在你想要的更好的情况中。

    通常,您不必为每个变更集创建一个补丁。你会创建一个补丁并不断刷新它,直到你对它感到满意为止。

    如果您对该功能的完成感到满意,那么您需要完成补丁并推动其他人看到代码。

    您可以查看此tutorial以了解MQ。