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.
只是神奇地解决了这个问题,但仍然不清楚为什么。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)
| 归档时间: |
|
| 查看次数: |
11535 次 |
| 最近记录: |