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

sim*_*mon 54 merge mercurial branch push

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

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

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

我已经做到了,但是我仍然无法推动 - 分支默认,而不会中止.

任何帮助表示赞赏.谢谢!

Ry4*_*ase 59

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

所以尝试:

hg push --branch default --new-branch
Run Code Online (Sandbox Code Playgroud)

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

此外,您可以使用这些非活动头部并使它们成为封闭头部:

hg update thebranch
hg commit --close-branch -m 'closing'
Run Code Online (Sandbox Code Playgroud)

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

  • 你的答案是正确的,但这并不意味着我必须喜欢它;) (10认同)
  • 当然可以.我使用git比使用Merucrial更多,而且我还有一个需要手动编辑的.gitconfig,因为git无法更新它.Mercurial不愿意破坏你的配置,如果你要求它就是git.只要记录在案,它们都是有效的选择.我不知道你在那里链接的文章,但那个人可以使用编辑器. (7认同)
  • 这里是git docs解释如果使用包含的话,`git config`将停止工作的地方:https://github.com/gitster/git/commit/9b25a0b52e09400719366f0a33d0d0da98bbf7b0 (5认同)
  • 很公平.我完全避免使用命名分支.我是克隆人的分支家伙. (2认同)
  • @bambams我希望评论可以被否决,所以我可以对你的观点进行否决。 (2认同)

Rem*_*ein 33

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

hg push -b myBranch
Run Code Online (Sandbox Code Playgroud)

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

  • 那是因为您要推送的分支尚未被推送到服务器。如果您要推送现有分支,则此答案有效。 (2认同)