Mercurial 重设要素分支的基础以避免合并

Mercurial 重设要素分支的基础以避免合并,mercurial,rebase,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-

我有默认的公共分支和私有的功能分支

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%相信这是一种方式。

我认为您的工作流更适合使用,而不是使用rebase

原因是,将分支的父级更改为8(以前是1)并不是一件小事,但这正是使用MQ时得到的效果

Mercurial queues保留了一组修补程序,每个修订版对应一个修补程序,在您完成功能的同时,可以根据需要轻松应用/取消应用这些修补程序

在您的场景中,您将执行以下操作:

  • 创建包含变更集2的第一个修补程序
  • 创建第二个修补程序以包含变更集3
  • 删除所有补丁
  • 拉式转换装置4
  • 应用所有补丁程序
  • 为变更集5创建修补程序
  • 为变更集6创建修补程序
  • 为变更集7创建修补程序
  • 删除所有补丁
  • 拉式转换装置8
  • 应用所有补丁程序
  • 这将在你想要的更好的场景中结束

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

    当您对功能完成感到满意时,您应该完成补丁并推送,让团队的其他成员看到代码


    您可以从这一点开始使用MQ。

    因为您已经将3和4合并为5,所以重新整理会有点乏味。我不知道有什么简单的方法可以做到这一点。我能想到的唯一方法是手动将5、6、7重新应用到3上,然后重新设置整组的基础。这将给你带来“更好”的局面。合并有什么错?每次移植或重新应用修补程序时,您都在有效地进行合并,但没有记录(在变更集中)这是如何发生的。@Ringding:由于更改没有重叠,并且在功能分支上与先前的默认更改没有关系,我希望Mercurial不会太难自动计算出来。@Edward:合并太多会给提交历史记录增加不必要的干扰,特别是如果它们可以合并成更少的合并而不会丢失任何东西。Mercurial还倾向于对clone上的修订进行重新排序,这会使包含许多单向合并的图形看起来比实际情况更复杂。