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


131

Mercurialとのコラボレーションは初めてです。私の状況:

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

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

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

回答:


126

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

hg update -C -r 3

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

その後、操作全体を実行するために、ある種のコードフォーマッタツールを使用するか、少なくとも一部を検索して正規表現に置き換える必要があります。一致^____するもの(アンダースコアの代わりに4つのスペースを使用)を__(2つのスペース)に置き換えるだけの簡単なものを数回繰り返します(非常にネストされたコードがない限り)。


ああ、ありがとう。私が自分でそれを理解したとき、あなたは正しく答えたに違いありません。私はemacsを使用M-x indent-regionしているので、再仕掛けのトリックも行いました。
Grumdrig、

6
追跡されていないファイルは削除されないことに注意してください。
djsutho 2015

132

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

hg update -C -r .

24
最初はこれがどのように機能するかわからなかった私のような人にとって.は:ドットは以前のリビジョンへのショートカットです。
Jeroen Wiert Pluimers、2014年

1
すばらしい答えです!最高のはずです
Oleg Abrazhaev

1
@Thymine:hg help update取得元:チェンジセットが指定されていない場合は、現在の名前付きブランチの先端に更新します...そして、先端は常に作業中の現在のリビジョンであるとは限りません。私は...これまでのところ、それをテストしていない
数学

1
ああ、それは知っておくのに十分な詳細です...実際に、私が去ること-r .が同じであると主張する私のコメントを削除します
Thymine

シンプルでとても役に立ちます。
Naveen Kumar V

33

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

hg update --clean

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


2

どうやら必要なのはhg update -C -r 3、ローカルファイルをリビジョンを念頭に置いて上書きすることです(これは私hg updateがやろうと思っていたことですが、私は間違っていました)。助けてくれてありがとう!


2
追加し-Cたり--clean、変更したファイルを破棄する場合でも、Mercurialに先に進むように指示する方法です。あなたは正しいですhg update -r Xが、通常はリビジョンXになりますが、マージしているときはもう少し主張する必要があります:-)
Martin Geisler

7
「hg revert --all --cancelmerge」の方がはるかに直感的だと思います。
ウォーレンP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.