我在 mercurial 中创建了一个 named
分支,提交了一些更改,现在我想将其推回中央存储库。我已经完成了一次提取,确认我没有要合并的更改,但是当我尝试进行推送时,我收到消息 push creates new remote head
但我不明白为什么。我是这个分支上唯一的开发人员,它仍然在我的存储库本地。
>hg fetch (pull/update/merge)
>hg status (shows nothing)
>hg push --new-branch mybranch
searching for changes
new remote heads on branch 'default'
new remote head c3064f3cf1b7
abort: push creates new remote head c3064f3cf1b7!
(did you forget to merge? use push -f to force)
有任何想法吗?
编辑 :抱歉有任何混淆,这是由
hg branch mybranch
创建的命名分支更新 :使用
hg heads
会在不同的分支上产生多个头。我的分支有一个,默认情况下有一个:changeset: 515:97b9a7802751
branch: mybranch
user: me <me@mymail.com>
date: Mon Feb 27 13:21:54 2012 -0800
files: CryptoRandom.cs
description:
fixing error message for size of max
changeset: 504:c3064f3cf1b7
user: me <me@mymail.com>
date: Thu Feb 09 11:41:32 2012 -0800
files: CipherKey.cs
description:
removing ambiguous characters - CAC-47
使用
hg log -r c3064f3cf1b7
产生以下结果(这是默认的头部):changeset: 504:c3064f3cf1b7
user: me <me@mymail.com>
date: Thu Feb 09 11:41:32 2012 -0800
files: CipherKey.cs
description:
removing ambiguous characters - CAC-47
最佳答案
令人困惑的是,--new-branch
标志在推送特征分支(也称为任意分支)时没有任何作用。匿名分支如下所示:
... [a] --- [b] --- [c] <- the servers head on default
\
[x] --- [y] <- my feature branch on default
所有变更集都在
default
上,因此您现在在 default
上有 两个头 。当您推送时,您将在服务器上创建两个头 - 但 Mercurial 在此之前中止并显示您看到的警告。它中止,因为在服务器上有多个头会令人困惑:当您 hg clone
时,您的工作副本将几乎随机更新为其中之一。--new-branch
标志仅用于 named branches 。如果您将新命名的分支推送到远程存储库,Mercurial 通常会中止。添加 --new-branch
标志是你告诉它继续的方式。不幸的是,我们没有专用的
--create-new-feature-branch
标志。我们只有--force
标志,该标志告诉Mercurial继续在远程存储库中创建两个头。 --force
的缺点是它否决了所有安全检查:您可以使用该标志推送三个或更多新头,甚至可以推送到不相关的存储库。所以你应该使用
hg outgoing
来仔细检查你要推送的内容。我在上面写道,服务器上的多个磁头令人困惑,因为新克隆将被更新为随机磁头。为避免混淆,您可以通过为功能分支添加书签来为其命名。您仍然会被更新为随机头,但
hg bookmarks
会向您显示可用的功能分支,然后您可以更新到正确的分支。因此,如果您正在使用这样的工作流程,请继续使用 hg push -f
。关于mercurial - 推送新分支时的新远程头,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9473950/