Mercurial - 如何将当前变更集推送到默认分支

时间:2013-09-05 23:18:25

标签: mercurial mercurial-extension mercurialeclipse

我不确定为什么这么难以弄清楚或google,但我正在尝试对私有分支进行更改并将其推送到默认分支。

换句话说:

  1. 几周前我从默认分支机构撤出并进行了重大更改
  2. 从那时起,我已经完成了我的工作
  3. 然后我合并了原始默认分支的代码(只是代码,HG仍然设置为“NewBranch”
  4. 现在代码工作了,我想提交并将这些更改推回到默认分支并继续我的开发。
  5. 但我找不到有关如何做到这一点的任何信息。如果我切换分支,我失去了所有的变更集,因为我还在NewBranch。我无法弄清楚什么是rebase或移植做什么,也找不到解释可以用于什么的场景的指南......所以希望有人在这里知道该做什么!

    我在Eclipse上专门使用Mercurial,但如果它更容易,我可以在命令行上这样做。

1 个答案:

答案 0 :(得分:2)

merge是将更改从一个分支转换为另一个分支的方法。我知道你将default合并到了功能中,但现在你走了另一条路。下面是一个示例,其中编号的更改集来自其他人,而字母更改集来自您:

在你做任何事之前你克隆并拥有:

[1]---[2]---[3]---[4]   (default branch)

然后你创建一个名为'feature'的分支并对其进行两次提交,产生:

[1]---[2]---[3]---[4]           (default branch)
                    \
                     [A]---[B]  ('feature' branch)

然后您hg pull将更改设置为默认值,因为您在本地存储库中分道扬:

[1]---[2]---[3]---[4]---[5]---[6]  (default branch)
                    \
                     [A]---[B]     ('feature' branch)

现在您希望将更改(5和6)集成到您的分支中,以便执行以下操作:

hg checkout feature   # make sure you're looking at the he head of your branch
hg merge default      # merge default into your branch

产生:

[1]---[2]---[3]---[4]---[5]---[6]        (default branch)
                    \           \
                     [A]---[B]---[C]     ('feature' branch)

如果我理解正确,你已经完成了所有这些,所以现在你只需要将你的分支,包括新的合并提交C,变为默认,这也是通过合并完成的:

hg checkout default   # hop back to default, files look like [6] and [A] and [B] are missing
hg merge feature      # merge feature into default brining [A] and [B] in

产生:

[1]---[2]---[3]---[4]---[5]---[6]---[7]   (default branch)
                    \           \   /
                     [A]---[B]---[C]      ('feature' branch)

这看起来像很多工作,但实际上通常只是:

hg branch feature
....work....
hg commit
hg pull
hg merge default
hg checkout default
hg merge feature

如果pull没有从其他地方删除任何新作品,您可以跳过将默认值合并到您的作品中。

这确实创建了两个新的合并变更集。如果你发现它们没有帮助,它们就很容易隐藏在hg log上(有些人喜欢记录每个合并的方向),但如果你想完全避免它们,你可以使用bookmarks(非常相似)为你的功能而不是“命名分支” - 然后你回来时会避免合并变更集,因为它将是git称之为“快进”合并的精神等价物。