如何只推到Hg的一个分支?

时间:2011-02-02 21:54:58

标签: mercurial merge branch push

我有一个Hg仓库,其中有3个分支,但其中两个是非活动的(因为我已将它们合并到我的默认分支中)。 hg heads 显示3个头,每个分支一个,即使 hg branches 显示其中2个分支为“inactive”。

当我尝试将我的默认分支(使用 hg push --branch default http:// ... )推送到另一个仓库时,合并将中止,并显示消息“abort:push created新的远程分支:!“

从Hg推送手册页,“默认情况下,推送将不允许在目的地创建新的头,因为多个头将使得不清楚使用哪个头。在这种情况下,建议先拉和合并推“。

我已经这样做了,但我仍然无法推动 - 分支默认,而不会中止。

感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:56)

如果default上的变更集在其他分支上具有祖先变更集,则您还必须推送这些变更集。如果变更集不存在于其所有变更集中,则不可能存在变更集。

所以试试:

hg push --branch default --new-branch

其中说“是的,我知道这个推送发送的是远程仓库以前没有见过的分支名称”(它还需要Mercurial 1.6或更高版本的IIRC)>

此外,您可以使用以下内容将这些非活动头部置于封闭头部:

hg update thebranch
hg commit --close-branch -m 'closing'

因为“命名分支是永远的”,许多人选择为长期存在的概念保留它们,如“稳定”和“实验”,并使用书签,匿名分支或克隆功能,发布和其他短暂的东西。有关其他选项的guide,请参阅此内容。

答案 1 :(得分:31)

要推送单个分支,只需使用-b

即可
hg push -b myBranch

至于具体问题,您可能希望查看结束分支。我知道SourceTree提供它,但我不确定具体细节

答案 2 :(得分:0)

你可以强迫它!

以下是:

1. Pull from your repository
2. hg push --rev nnn -f (replace nnn with your Rev # of your working branch)
3. do NOT force before PULLing. if you do things will get out sync and you are screwed

如果你正在使用像RhodeCode这样的东西,那么在强制它之后检查它,你会发现你的最新分支就在那里。

但是我认为稍后Mercurial会要求你再次推送另一个分支,即使你关闭它,Mercurial也会尝试在服务器上创建该分支。

我也是Git用户并遇到了同样的情况,因为客户正在使用Mercurial,但我想使用Git工作流程样式。

我认为这是可行的,但我还没有想出100%。