我不确定为什么这么难以弄清楚或google,但我正在尝试对私有分支进行更改并将其推送到默认分支。
换句话说:
但我找不到有关如何做到这一点的任何信息。如果我切换分支,我失去了所有的变更集,因为我还在NewBranch。我无法弄清楚什么是rebase或移植做什么,也找不到解释可以用于什么的场景的指南......所以希望有人在这里知道该做什么!
我在Eclipse上专门使用Mercurial,但如果它更容易,我可以在命令行上这样做。
答案 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称之为“快进”合并的精神等价物。