23

コード レビュー リポジトリがあり、hg push -fあらゆる種類のものがあります。レビューが完了したら、プロジェクトの中央リポジトリからプルし、リベースし、プッシュします。最近、mercurial 2.1 にアップグレードしたところ、次のメッセージが表示されました。

abort: can't rebase immutable changeset 43ab8134e7af
(see hg help phases for details)

hg pull --rebase中央リポジトリから行おうとすると。どうすれば修正できますか?

4

3 に答える 3

36

レビュー リポジトリの .hg/hgrc ファイルに、次の行を追加します。

[phases]
publish = False

この問題は、フェーズと呼ばれる Mercurial 2.1 の新機能によるものです。それは素晴らしい。ここでは、その使用法について簡単に紹介します。

問題の変更セットを今すぐ変更可能にするには、を使用hg phase -f -d REVして REV を再び変更可能にします。hgrc ファイルが変更されたら、それ以上行う必要はありません。

補足として、hg push -fラメです。そのリポジトリにhg reviewプッシュするエイリアスを作成します。-f

于 2012-03-21T18:53:32.360 に答える
3

サーバーでフェーズサポートを無効にすることは正しい解決策ではないと思いますが、あなたの問題は奇妙に聞こえます。

Pull --rebaseリモートの変更の上に、ローカルの変更をリベースする必要があります。これは、フェーズがクライアントによってサポートされている場合でも、これらの変更が他の誰にも見られていない限り、許可される必要があります。彼らはどこにも追い出されていません。

独自の変更を別の場所 (パブリック フェーズに設定) に既にプッシュし、その後、テスト リポジトリからプルしようとした可能性はありますか? そのため、これはあなたが見ている正しい動作です。

ほとんどの場合、手動で ( を使用して) フェーズをいじるのは悪い考えですhg phase -f。なぜなら、簡単に履歴の書き換えにつながる可能性があり、変更セットの重複や、他の人がプル/プッシュしようとしたときにさまざまなエラーが発生する可能性があるためです。変更セットが公開としてマークされた場合 (あなたの場合のように)、おそらく正当な理由で発生しました。

于 2012-03-31T23:28:39.137 に答える
0

折りたたまれたリベースでこのような動作に遭遇しました。段階的にドラフトに戻すことは、私には役に立ちませんでした。それで、私はプルアップ ( hg pull -u) してリモートリポジトリと同期し、問題のコミット ( hg graft <problem_commit>) を移植して、この非常に新しいコミットを修正しました。

于 2014-05-08T16:26:17.527 に答える