2022.02.06  

【Git】 完了したマージを取り消しす

Git    

マージしたものの、それが間違いだったのでマージ前の状態に戻したい・・・そんな時のための手順を記載しておきます。

実行するコマンドは次の通りです。

$ 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を指定して確認します。

commit: dbe5ed7の確認
$ 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

commit: b347cfeの確認
$ 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

これにて作業完了です。

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信