名前付きブランチを含む変更セットを、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
失敗する可能性はありますか?
(*) オフショアの開発者が、コード ドロップを zip アーカイブとしてメールで送信するのではなく、Mercurial と Bitbucket をまだ直接使用していない理由は、あまりにも恐ろしい話です.]