我正在尝试将包含命名分支的变更集推送到托管在 Bitbucket 上的 Mercurial 存储库,但push creates a new remote head (did you forget to merge?)
出现错误。无论我是否将--new-branch
选项指定为hg push
.
(在这种情况下,Mercurial 文档建议“在推送之前进行拉取和合并”,但是当我运行hg incoming
它时报告“未找到任何更改”,即 Bitbucket 存储库中没有任何内容不在我的本地存储库中)。
正如标题所暗示的那样,我的场景可能与我所看到的行为有关,我将在下面尝试解释:
我尝试推送到 Bitbucket 存储库的分支的名称实际上与我之前成功推送但后来通过 关闭的分支的名称相同hg commit --close-branch
,因为我错误地使用错误的父版本创建了它。
(为什么新分支名称必须与旧分支名称相同,这是一个很长的故事 - 但它确实如此。)
我不记得第一次推动分支有任何问题。我相信我曾经hg push --new-branch
这样做过,但是现在实际的命令已经从我的命令行历史缓冲区的顶部滚动了出来,所以我无法证明这一点。不过,无论如何,--new-branch
这一次该选项并没有解决问题。
这是修订历史的图表:
0 0. Baseline of production code
|\
1 \ 1. Fixes to production code
| \
2 \ 2. More fixes to production code
/|\ |
3 | | | 3. Import new feature drop from offshore developer (*),
| | | | to named branch "drop1". (But I goofed! Parent
| | | | revision should have been r0.)
| | | |
4 | | | 4. "hg commit --close_branch" to prune the
| | | original "drop1" branch created in error.
| | |
| | 5 5. Import new feature drop again,
| | | this time with correct parent revision.
| | | Named branch via "branch -f drop1"
| | | (to shadow the name of the closed branch).
| \|
| 6 6. Merge bug fixes from production into drop1
| |
| 7 7. Fixes to drop1 code
|
8 8. Ongoing maintenance of production code
我已经能够将 r0 到 r4 提交到 Bitbucket 存储库,但是尝试推送 r5(有或没有该--new-branch
选项)会给我:
abort: push creates new remote head 439d23090786 on branch 'drop1'!
(did you forget to merge? use push -f to force)
所以问题是:
push -f
除了使用r5 进入 Bitbucket 存储库,我还有其他选择吗?- Bitbucket 的 Mercurial 版本是否可能不理解原始的“drop1”分支因 r4 的成功推送而关闭,从而导致
hg push --new-branch --rev 5
失败?
(*) 为什么离岸开发人员还没有直接使用 Mercurial 和 Bitbucket,而不是通过电子邮件将代码删除作为 zip 存档发送给我,这是一个太可怕的故事。]