推新分支时新的远程头

ear*_*ing 7 mercurial push branching-and-merging

我已经named在mercurial中创建了一个分支,进行了一些更改,现在我想将其推回到中央仓库.我已经完成了一次获取,验证了我没有合并的更改,但是当我尝试进行推送时,我收到了消息,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)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑:对不起任何混淆,这一个由.创建的命名分支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
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

Mar*_*ler 14

令人困惑的是,--new-branch当推动特征分支(也称为任意分支)时,该标志无效.匿名分支看起来像这样:

... [a] --- [b] --- [c] <- the servers head on default
               \
                [x] --- [y] <- my feature branch on default
Run Code Online (Sandbox Code Playgroud)

所有变更都在default,所以你现在有两个脑袋default.当您按下时,您将在服务器上创建两个磁头 - 但Mercurial会在此之前使用您看到的警告中止.由于在服务器上有多个磁头令人困惑,它会中止:当你hg clone的工作副本将被更新为其中一个时,几乎是随机的.

--new-branch标志仅用于命名分支.如果将新的命名分支推送到远程存储库,Mercurial通常会中止.添加--new-branch标志是你如何告诉它继续前进.

不幸的是,我们没有专用的--create-new-feature-branch旗帜.我们只有一个--force标志告诉Mercurial继续在远程存储库中创建两个头.缺点--force是它取代了所有安全检查:你可以使用该标志推送三个或更多新头,你甚至可以推入一个不相关的存储库.所以你应该hg outgoing用来仔细检查你要推的东西.

我在上面写道,服务器上的多个磁头令人困惑,因为新的克隆将更新为随机磁头.为避免混淆,您可以通过为其添加书签来为功能分支命名.您仍将更新为随机头,但hg bookmarks会显示可用的功能分支,然后您可以更新到正确的功能分支.因此,如果您正在使用此类工作流程,请继续hg push -f.


ear*_*ing 1

只是神奇地解决了这个问题,但仍然不清楚为什么。default即使我不在那个分支上工作,这似乎确实是一个问题。我可以打电话>hg branch并获得预期的分支名称。

我在当地的default分支机构进行了一项更改,但没有被推动,也不想这样做。我放弃了这一改变,然后又做出了承诺。然后我fetch在默认分支上做了一个并将其合并到我的功能分支。然后我又default合并了默认的变更集,我相信我已经退出了。在这个过程中的某个时刻,我又得到了另一个头,这可能导致了多次合并。

这一切似乎都归结为默认情况下现有的头,但我仍然不知道为什么(或者为什么我们想要)影响一个单独的命名分支。

对于我期望发生的事情来说,这一切似乎过于复杂(每个人都可以简单地在 ascii 图中画出)

编辑

看起来问题可能源于最初的分支。看起来我分支了两次,并且[j]默认是匿名分支。

可视化似乎正在发生的[j]事情是我退出的变更集,也是[k]我在 mybranch 上的第一次提交:

[a] -- [b] -- [c] -- [d] -- [e]  (default)
         \             \    /
          [j]-----------\---     (not sure where this branch came from)
            \            \
            [k] -- [l] -- [m]    (mybranch. Still separate from default)
Run Code Online (Sandbox Code Playgroud)