HOWTO · Git
競合のある Git マージを元に戻す
競合がある Git マージを元に戻すことができます。
この記事では、マージの競合が発生したときに git merge コマンドを元に戻す方法について説明します。 また、成功してリモート リポジトリにプッシュされた git merge を元に戻す方法についても簡単に説明します。
競合のある Git マージを元に戻す
このセクションでは、以下で説明する例を使用します。
私たちのリポジトリには master と feature ブランチがあります。 master を feature にマージすると競合が発生するように、両方のブランチで README.md ファイルを編集します。
git merge コマンドを実行すると、そのような結果が得られるはずです。

このようなマージを元に戻すには、以下に示すように、git merge --abort コマンドを実行できます。
$ git merge --abort
このコマンドは、リポジトリをマージ前の以前の状態にリセットします。 確実ではありませんが、コミットされていない変更も復元する必要があります。
その上、コミットされていない変更でブランチをマージするのは初心者だけです。
git reset --merge コマンドを使用することもできます。これは、git merge --abort コマンドと同じことを行います。
$ git reset --merge
もう 1つの便利なコマンドは、git reset --hard です。 マージと、マージによって作業コピーに導入された変更がなくなります。
成功したマージを元に戻したい場合はどうすればよいでしょうか?
まず、マージ用のコミット ハッシュが必要です。 git log --oneline コマンドを実行して、リポジトリ内のコミットを一覧表示できます。
次に、以下に示すように、マージ コミットのハッシュをコピーします。

マージコミットの後、コミットのハッシュで git reset コマンドを使用します。 簡単に言うと、コミットは HEAD@{1} にあります。
$ git reset --hard c315395
HEAD is now at c315395 Trial2
または、以下に示すように、git reset コマンドを実行することもできます。
$ git reset --hard HEAD~1
これにより、1つのコミットでリポジトリがロールバックされます。
マージをリモート リポジトリにプッシュしたシナリオで、同じものを元に戻すにはどうすればよいでしょうか?
既に変更をプッシュしている場合は、以下に示すように、マージの変更を元に戻し、それらをリモート リポジトリにプッシュするコミットを作成する必要があります。
$ git revert -m 1 08396d4
これにより、マージによって導入された変更が元に戻ります。 git revert コマンドをマージ コミットのコミット ハッシュと共に使用しました。
これで、変更をリモートにプッシュして、マージを元に戻すことができます。
簡単に言えば、Git では競合が発生したときにマージをキャンセルできます。 このようなシナリオでは、git reset --merge および git merge --abort コマンドが便利です。
マージが成功し、変更をリモートにプッシュした場合は、マージによって導入された変更を元に戻す新しいコミットを作成する必要があります。