今回はGitの操作を誤り、間違ってマージしてしまった時の対処法を2つ解説したいと思います。マージした結果、予期しないコンフリクトが起きてしまい、やっぱりマージコミットを取り消したい!というような場面にも使えますね。
下準備
まずはアプリケーションを立ち上げ、「initial commit」まで実行しておきます。今回の場合は「CommitApp」というアプリケーション名で立ち上げました。
続いてブランチを新たに切ります。今回は「merge-test」というブランチを作成します。作成後はその「merge-test」ブランチに移動します。
↓ ブランチ作成からの移動
$ git branch merge-test
$ git checkout merge-test
その後以下のようにREADMEを編集し、コミット&プッシュを行いました。
↓ READMEに「マージを取り消したい!」と追記

↓ コミット&プッシュ
$ git add .
$ git commit -m 'merge cancel test'
$ git push origin merge-test
次にGithubのページにアクセスし、プルリクエストを作成&マージまで行いましょう。
↓ プルリクエスト作成&マージ

最後にmasterブランチに切り替え、pullでリモートの変更をローカルに取り込んで完了です。
$ git checkout master
$ git pull origin master
これで下準備は終わりました。次の項目からマージを取り消す方法を見ていきましょう。
マージを取り消す方法
git reset –hard <コミット番号>
マージを取り消す方法の1つ目は、全ての歴史を書き換えることで有名な「reset –hard」コマンドです。マージのコミット番号を指定するだけで、マージを取り消すことができる便利なコマンドですが、保存していない履歴やステージングエリアにある情報も全て消し飛ぶので注意して実行しましょう。
では実際に先ほどのマージを「reset –hard」コマンドで取り消してみます。
$ git checkout master
$ git log //戻りたい地点のコミットの番号を確認
$ git reset --hard d1f7cc360d8b58d3fd436646542bc95c231e1305
これでローカルはマージする前の状態に戻りました。
しかしここで1つ問題があります。それはローカルではマージする前の状態に戻りましたが、リモートではその変更が変わっていないということです。
↓ reset –hardでコミットを消してもリモートは残ったまま

ではこの場合、どうすれば良いのでしょうか。答えは、強制的にローカルの情報をリモートにプッシュするということです。
以下のコマンドを打ち込みましょう。
$ git push -f origin master
するとリモートのコミット履歴も綺麗に消え去るはずです。
git revert -m 1 <コミット番号>
もう一つの解決方法はrevertコマンドです。マージコミットを打ち消すコミットを新たに生成することでマージを取り消します。
では同様に先ほどのマージをrevertコマンドを使って取り消してみましょう。
$ git revert -m 1 0173043ce3e66c173d96d297184c9318585e8ecc
-m <親番号>を指定することで、特定の履歴を打ち消すことができます。例えば、masterブランチにmerge-testブランチをマージさせたのであれば、masterが1、merge-testが2となります。
↓ マージコミットの打ち消しコミットが生成されている

あとは、この変更をリモートにも反映させるためプッシュするだけです。
$ git push origin master
↓ リモートにもrevertした変更が反映されている

これでマージする前の状態に戻ったはずです。しかし注意すべき点としてはマージした事実は消えないということです。 そのため、そのブランチを再度マージしたとしても、取り込みが発生しません。
その場合は新しくブランチを作成してマージするようにしましょう。
まとめ
- git reset –hard <コミット番号>でマージコミットを取り消す
- git revert -m 1 <コミット番号>でマージコミットを取り消す
参考図書
(2025/05/12 05:13:12時点 楽天市場調べ-詳細)
今回は誤ってマージしてしまった時に役立つ、マージを取り消すコマンドを2つ解説しました。「reset –hard」と「revert」コマンドは同じマージコミットを取り消すコマンドでも、それぞれで役割が違うのでしっかりと理解した上で使っていきましょう。