競合のあるgitマージを元に戻す方法


785

私はブランチにいmybranch1ます。mybranch2から分岐されmybranch1、で変更が行われましたmybranch2

次に、を実行しmybranch1ている間に、git merge --no-commit mybranch2 マージ中に競合があったことを示しています。

今、私はすべて(mergeコマンド)を破棄したいので、mybranch1以前の状態に戻ります。どうすればいいのかわかりません。


回答:


1355

最新のGit:

git merge --abort

これにより、作業コピーがマージ前の状態にリセットされます。つまり、マージ前にコミットされていない変更を復元する必要がありますが、常に確実に復元できるとは限りません。通常は、コミットされていない変更をマージしないでください。

バージョン1.7.4より前:

git reset --merge

これは古い構文ですが、上記と同じです。

バージョン1.6.2より前:

git reset --hard

これにより、コミットされていないマージを含む、コミットされていないすべての変更が削除されます。この動作は、上記のコマンドをサポートする新しいバージョンのGitでも役立つ場合があります。


1
しかし、古いバージョンのgitでは、これが使用方法です
Anshul

7
ときどきgit reset --merge、より新しいバージョンでも使用する必要があります。私はgit 2.2.1 git merge --abortgit reset --merge成功した(そして正しいことをする)エラーを出しました(変更を加えていません)。
セオドアマードック2015年

自動マージで競合が発生し、スタッシュをポップgit merge --abortする必要があることがわかりましたgit reset --merge
ファラオシェフ、

1
通常は問題なくgit merge --abort動作しますが、デタッチされたHEAD状態でチェックアウトし、ファイルの1つが「両方が変更された」状態である状況になりました。私はすべてを破棄してブランチに戻りたかったのでgit reset --hardgit merge --abort中止する必要があるマージがないと伝えなければなりませんでした(MERGE_HEADがありません)。
yano 2018

git merge --abortは、以前の状態に戻すことができない場合があります。その場合、「古い構文」でgit reset --hardうまくいきます。
Kevin Stewart

130

実際に、それは価値が気付かあるgit merge --abortだけに相当しgit reset --merge、与えられたMERGE_HEAD存在です。これはgit help for mergeコマンドで読むことができます。

git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.

何がある場合に失敗し、マージした後、MERGE_HEAD失敗したマージはして元に戻すことはできませんgit reset --merge必ずしもではなくgit merge --abort彼らは同じもののために古いものと新しい構文ではないだけですので

個人的にはgit reset --merge、毎日の仕事ではるかに役立つと思います。


2
ありがとう、この情報はとても役に立ちました。私はgit stash apply間違ったブランチで始まるマージを持っていて、トリックをしている間にgit merge --abort何もしませんでした(いいえMERGE_HEADgit reset --merge
ジオマスター2015

4
私は約10人git merge --abortが新しいコマンドであるgit reset --mergeと言っているのを見てきました。@ geomasterと同じ問題に遭遇しました。これは非常に役に立ちました!
トム


5

コマンドでマージを元に戻すには、2つの方法があります。

git merge --abort

または

コマンドで一時的に以前のコミット状態に戻ることができます

git checkout 0d1d7fc32 

0

ソースツリー

マージをコミットしない場合は、別のブランチ(=チェックアウト)をダブルクリックし、sourcetreeがすべての変更の破棄について尋ねたら、同意します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.