競合のある 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
コマンドが便利です。
マージが成功し、変更をリモートにプッシュした場合は、マージによって導入された変更を元に戻す新しいコミットを作成する必要があります。
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn関連記事 - Git Reset
- Git RM -- キャッシュと Git リセット ファイルの違い
- Git のリセット、元に戻す、およびチェックアウト コマンドの違い
- ローカル Git の変更を削除するために使用されるさまざまな方法
- 開発ブランチをマスター ブランチと同一にする
- Git の変更を元に戻す