マージしたものの、それが間違いだったのでマージ前の状態に戻したい・・・そんな時のための手順を記載しておきます。
実行するコマンドは次の通りです。
$ git revert -m <マージコミットの親番号 1 or 2> <commit ID>
前提と注意点
前提
リモート上のmaster
ブランチに対し、直近のマージを取り消したいものとします。
注意点
この方法でマージを取り消した場合、マージコミットに含まれていた変更を再度マージできなくなります。
ブランチA
に対して ブランチB
をマージして、
その後ブランチA
を元の状態に戻した場合、
取り消したブランチB
のマージは再び行えません。
※ コミット履歴にマージした情報を残したままマージを取り消すため。参考
事前準備
ローカル端末でマージを取り消したいブランチ(master)に移動し、ローカルブランチの情報を最新化します。
$ git checkout master
$ git fetch
$ git pull
マージの取り消し
マージの取り消しに必要な情報を取得するため、下記コマンドを実行します。
$ git log | grep -m1 -B1 Merge
commit 77248fe974d3c8d1fe7dcba5b08b3a030c5cdff5
Merge: dbe5ed7 b347cfe
grepに-m1
オプションを指定することで、直近のMerge情報を取得しています。
commit
に表示されてるIDは次の手順で利用するgit revert -m <マージコミットの親番号 1 or 2> <commit ID>
の<commit ID>
部分に指定します。
Merge
部分に、マージしたcommitのIDが表示されます。
それぞれ、左側が1
、右側が2
となり、取り消しを行いたい方をgit revert
コマンドの-m
に指定します。
どちらのcommitを取り消すべきかについては、grepにcommit コミットID
を指定して確認します。
$ git log | grep -A10 'commit dbe5ed7'
commit dbe5ed7534bb46a13759e242a664a85cc55eed4d
Author: UesrA <79950033+UesrA@users.noreply.github.com>
Date: Sat Feb 5 17:24:59 2022 +0900
Update test_master.txt
$ git log | grep -A10 'commit b347cfe'
commit b347cfec80802a4ebde526b32e15d3491e7df6fa
Author: UesrB <github>
Date: Sun Feb 6 10:59:19 2022 +0900
コミット
今回は、UserAでtest_master.txtを編集したマージを取り消したいので、git revert -m
に指定する数字は1
となります。
情報がでそろったので、git revert
コマンドを実行します。
$ git revert -m 1 77248fe974d3c8d1fe7dcba5b08b3a030c5cdff5
実行すると、以下のようなテキストが表示されます。
Revert "Merge pull request #6 from User/feature/test_branch_A"
This reverts commit 77248fe974d3c8d1fe7dcba5b08b3a030c5cdff5, reversing
changes made to dbe5ed7534bb46a13759e242a664a85cc55eed4d.
上記テキストを:q
で閉じ、git push
コマンドで取り消した内容をリモートのmasterブランチに登録します。
git push
これにて作業完了です。