私の最初の状況は、この質問の状況と似ています。強力なGitのバックグラウンドから来て、( histedit拡張機能を使用して)いくつかのコミットを押しつぶした/折りたたんだプライベートブランチ(同じ名前で)のクリーンアップバージョンを強制的にプッシュしたいと思いました。私がもう一度したことはこの答えに似ていますが、私は別の順序で物事を行いました:
$ hg clone -b private_branch <url>
$ hg histedit -r <some_rev> # Fold some commits
$ hg push -f # This creates a second branch head on the server
$ hg update -r <rev_of_original_branch_head>
$ hg commit --close-branch -m 'Closing this branch in favor of a cleaned-up version'
$ hg push
わからないのは、新しい作業ツリーを設定すると、
$ hg clone -b private_branch <url>
$ hg log -l 1
changeset: <rev>:<sha1>
branch: private_branch
tag: tip
parent: <tip_rev_of_branch_before_folding>:<sha1>
user: <name> <email>
date: Wed Aug 08 11:48:25 2012 +0200
summary: Closing this branch in favor of a cleaned-up version
なぜtip
閉じたブランチを指しているのですか?hg heads
予想通り、力を加えた頭だけを表示しています。ただし、hg heads -t
はの両方のヘッドを示していprivate_branch
ます。また、私のクロージングコミットが実際にクロージングコミットであることを確認しましhg log --debug
たextra: close=1
。
編集:これに関する問題は、新しいクローンでコミットを行うと、次のようになります
$ hg ci -m "test"
created new head
reopening closed branch head <rev>
しかし、私は閉じたブランチヘッドを再び開きたくありません。開いたブランチヘッドの上にコミットしたいと思います。
どうすればこれを修正できますか?できればno-opマージを実行せずに修正できますか?