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

Posted

技术标签:

【中文标题】如何只推送到 Hg 中的一个分支?【英文标题】:How to only push to one branch in Hg? 【发布时间】:2011-06-20 07:14:10 【问题描述】:

我有一个包含 3 个分支的 Hg 存储库,但其中两个处于非活动状态(因为我已经将它们合并到我的默认分支中)。 hg 头 显示 3 个头,每个分支一个,即使 hg 分支 将其中 2 个分支显示为“非活动”。

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

来自 Hg push 手册页,“默认情况下,push 不允许在目的地创建新的头,因为多个头会导致不清楚使用哪个头。在这种情况下,建议先拉取和合并推。”

我已经这样做了,但我仍然无法推送 --branch default 而不中止它。

感谢任何帮助。谢谢!

【问题讨论】:

【参考方案1】:

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

hg push -b myBranch

至于具体问题,您可能需要查看关闭分支。我知道 SourceTree 提供它,但我不确定具体细节

【讨论】:

谢谢,这是我正在寻找的答案。简单来说如何推送一个分支。 那是因为你推送的分支还没有推送到服务器。如果您要推送现有分支,则此答案有效。【参考方案2】:

你可以强制它!

方法如下:

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%。

【讨论】:

【参考方案3】:

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

那就试试吧:

hg push --branch default --new-branch

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

此外,您可以使用以下方法将那些不活动的头设为闭合头:

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

因为“命名分支永远存在”,许多人选择将它们保留用于“稳定”和“实验”等长期存在的概念,并使用书签、匿名分支或克隆来实现功能、发布和其他临时性事物。有关其他选项,请参阅guide。

【讨论】:

你的答案是正确的,但这并不意味着我必须喜欢它;) 很公平。我完全避免命名分支。我是分支的克隆人。 当然可以。我使用 git 比使用 Merucial 多,而且我还有一个 .gitconfig 需要手动编辑,因为 git 无法更新它。 Mercurial 不愿意破坏你的配置,而 git 是如果你要求的话。只要记录在案,它们都是有效的选择。我不知道你链接到谁的文章,但那个人可以使用编辑器。 这里是 git 文档解释 git config 将停止工作,如果你使用包括:github.com/gitster/git/commit/… @bambams 我希望 cmets 可以被否决,所以我可以否决你的。

以上是关于如何只推送到 Hg 中的一个分支?的主要内容,如果未能解决你的问题,请参考以下文章

在推送之前丢弃 Mercurial 中的本地分支

将本地提交的更改推送到新分支

hg推送HTTP服务器的凭据

git 创建分支并推送到远程分支

git 强制推送到master

hg命令