1

私の最初の状況は、この質問の状況と似ています。強力な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 --debugextra: close=1

編集:これに関する問題は、新しいクローンでコミットを行うと、次のようになります

$ hg ci -m "test"
created new head
reopening closed branch head <rev>

しかし、私は閉じたブランチヘッドを再び開きたくありません。開いたブランチヘッドの上にコミットしたいと思います。

どうすればこれを修正できますか?できればno-opマージを実行せずに修正できますか?

4

2 に答える 2

1

tip タグは特別な「フローティング」タグで、常にリポジトリ内の最新のリビジョンを識別します。

( http://hgbook.red-bean.com/read/managing-releases-and-branchy-development.htmlから)

そのためtip、閉鎖されたブランチを含むリビジョンを指しています。

ここに実際に問題がありますか?働き続けるだけprivate_branchで、あなたが望んでいた変化を遂げることができます。

于 2012-08-08T14:56:32.543 に答える
1

解決策は、単に行うことでした

$ hg update private_branch

によって示されるように、作業ディレクトリの親リビジョンをhg parent(s)、閉じたブランチ ヘッドから離れた、新しく作成された開いたブランチ ヘッドに設定します。すでに「そのブランチにいる」のに「ブランチを切り替える」必要があることは、やや直感的ではありませんでしたが、この場合、ブランチを切り替えるのではなく、単一のブランチ内でヘッドを切り替えていました。Git とはまったく異なる動作をするもの。

于 2012-08-09T08:27:34.863 に答える