web-dev-qa-db-ja.com

hgマージを放棄する方法は?

Mercurialとの共同作業は初めてです。私の状況:

  • 別のプログラマは、ファイルのリビジョン1を変更して、4スペースのインデントを2スペースのインデントに置き換えました。 (つまり、すべての行を変更しました。)rev 2を呼び出し、リモートリポジトリにプッシュします。
  • ローカルワークスペースでのさまざまなコード変更を伴う実質的な変更rev 1をコミットしました。そのrev 3を呼び出します。
  • 私はhg pulledおよびhg mergedを実行しましたが、何が起こっているのか明確にわかりませんでした。
  • 紛争は無数にあり、実際には実質的ではありません。

したがって、マージする前にローカルリポジトリを2スペースのインデントに変更してほしいと思います。その後、マージは簡単になります(私は推測しています)。しかし、私はバックアップできないようです。 hg update -r 3が必要だと思いますが、abort: outstanding uncommitted mergesと表示されます。

マージを元に戻し、ローカルリポジトリの間隔を変更し、再マージするにはどうすればよいですか?

126
Grumdrig

コミットされていない変更を破棄するには、-C(または--clean)フラグを使用します。

hg update -C -r 3

注意:コミットされなかったものはすべてなくなります!

その後、おそらく何らかの操作を行うために何らかのコードフォーマッターツールを使用するか、少なくともいくつかを見つけて正規表現に置き換えてください。 ^____(アンダースコアの代わりに4つのスペースを使用)に一致するものを__(2つのスペース)に置き換えるだけの簡単なことを、数回繰り返します(入れ子になったコードがない場合)。

121

ところで:あなたが行ったマージを元に戻し、3があなたのリビジョン番号ではない場合、これを行うことができます:

hg update -C -r .
123
math

コミットされていないマージを取り消すには、次を使用します

hg update --clean

元のマージ親のクリーンコピーがチェックアウトされ、すべての変更が失われます。

30
Tao

私はどうやらhg update -C -r 3、これはローカルファイルをrevを念頭に置いて上書きします(これは私が考えていたhg updateはそうするでしょう。しかし、私は間違っていた。)助けてくれてありがとう!

2
Grumdrig