0

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

换句话说:

  1. 几周前我从默认分支中撤出并进行了重大更改
  2. 从那时起,我完成了我的工作
  3. 然后我合并了原始默认分支中的代码(只是代码,HG仍然设置为“NewBranch”
  4. 现在代码可以工作了,我想提交这些更改并将其推送回默认分支,并从那里继续我的开发。

但我找不到任何关于如何做到这一点的信息。如果我切换分支,我会丢失所有的变更集,因为我仍在 NewBranch 中。我不知道变基或移植做什么,也找不到解释它们可以用于什么场景的指南......所以希望这里有人知道该怎么做!

我专门在 Eclipse 上使用 Mercurial,但如果它更容易,我可以在命令行上执行此操作。

4

1 回答 1

3

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

在你做任何事情之前,你克隆并拥有这个:

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

然后您创建名为“功能”的分支并对其进行两次提交,产生:

[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 分支)而不是“命名分支”对于您的功能 - 那么您将在返回时避免合并变更集,因为它在精神上等同于 git 所说的“快进”合并。

于 2013-09-06T02:04:28.423 回答