Mercurial 如何在Hg中只推送一个分支?

Mercurial 如何在Hg中只推送一个分支?,mercurial,merge,branch,push,Mercurial,Merge,Branch,Push,我有一个Hg回购协议,其中有3个分支,但其中两个是非活动的(因为我已经将它们合并到我的默认分支中)。hg头显示3个头,每个分支一个,即使hg分支显示其中2个分支为“非活动” 当我尝试推送我的默认分支时(使用hgpush--branchdefaulthttp://...)对于另一个repo,合并被中止,并显示消息“abort:push创建新的远程分支:!” 在Hg push手册页中,“默认情况下,push不允许在目的地创建新的头,因为多个头会使使用哪个头变得不清楚。在这种情况下,建议在推之前拉合并

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

当我尝试推送我的默认分支时(使用hgpush--branchdefaulthttp://...)对于另一个repo,合并被中止,并显示消息“abort:push创建新的远程分支:!”

在Hg push手册页中,“默认情况下,push不允许在目的地创建新的头,因为多个头会使使用哪个头变得不清楚。在这种情况下,建议在推之前拉合并。”

我已经这样做了,但我仍然无法在不中止的情况下推送分支默认值


感谢您的帮助。谢谢

如果
default
上的变更集在其他分支上有祖先变更集,那么您也必须推送这些变更集。如果一个变更集的所有变更集都不存在,它就不可能存在于回购协议中

因此,请尝试:

hg push --branch default --new-branch
上面写着“是的,我知道这个推送发送的分支名称是远程回购以前从未见过的”(它还需要Mercurial 1.6或更高版本的IIRC)>

此外,您还可以使用以下方法获取这些非活动磁头并使其闭合:

hg update thebranch
hg commit --close-branch -m 'closing'
因为“命名分支永远存在”,许多人选择将它们保留为“稳定”和“实验”等长期存在的概念,并将书签、匿名分支或克隆用于功能、发行版和其他暂时的东西。有关其他选项的详细信息,请参见此项。

您可以强制执行

以下是如何:

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%地计算出来。

要推动一个分支,您只需使用-b

hg push -b myBranch

至于具体问题,您可能需要考虑关闭分支机构。我知道SourceTree提供了它,但我不确定具体内容

您的答案是否正确,但这并不意味着我必须喜欢它;)很公平。我完全避免使用命名分支。我是一个克隆人,是的。我使用git多于使用Merucrial,我还有一个.gitconfig,需要手工编辑,因为git无法更新它。Mercurial不愿意破坏您的配置,git也不愿意,如果您要求的话。只要记录在案,它们都是有效的选择。我不知道你在那里链接到了谁的文章,但那家伙可能需要一个编辑。在这里,git文档解释说,如果你使用includes:@bambams,git config将不再像广告中那样工作:@bambams我希望评论可以被否决,这样我就可以否决你的评论。谢谢,这就是我想要的答案。简单介绍如何推送单个分支。这是因为您正在推送的分支尚未推送到服务器。如果您正在推送一个现有的分支,这个答案是有效的。