あ!間違えてPRをマージしちゃった!ってときにリバートする方法


はじめに

Gitと使って開発しているとPRを作成してレビューしてもらうことがあると思います。
そして、間違えて自分でマージしちゃうこともあると思います。

そんなときのために、マージを取り消す方法をまとめて見ました。
Github上でボタンをポチポチ押すだけで簡単にできます。

ブランチとPR

ブランチ

今回はmasterブランチとtest1ブランチを用意します。
master: initial commitのみ
test1ブランチ: masterから切って、"test1"というメッセージでコミット

PR

test1をmasterに向けてPRを作成しました。(master ← test1)

リバート(revert)する方法

1. マージしてしまったPRからrevertボタンを押す

マージした後は下記のような画面になっていると思いますが、その中にあるrevertボタンを押します。

2. mergeを打ち消すPRを作成する

revertボタンを押すと、mergeを打ち消すブランチとPRが自動的に作成されます。

3. mergeを打ち消すPRをmergeする

PRを作成するとMerge pull requestボタンがあるのでそれを押します。

4. mergeを打ち消すbranchを削除

必須ではないですが、mergeを打ち消すブランチを削除しておきます。(Delete Branchを押す)

5. 確認

ブランチを見るとmastertest1のみでmergeを打ち消すブランチはありません

コミットはこんな感じになっています。

  • 間違えてしまったマージ
  • リバート
  • マージを打ち消すマージ

revertしたブランチを再度PRに出したい時

revertしてもう一度PRを出そうとしても差分がなくPRが出せない状態になっています。

もう一度PRを出せるようにするには、revertをrevertする必要があるらしい。。。(何をしているかは正直わかっていません。。。)

masterに移動してまずはlogを確認。
(何度か試していて違うコミットになっているので、私の場合上の写真のcommit idと下のcommit idが異なっています。通常は一緒です。)

$ git checkout master

$ git pull # git上でmerge/revertしているのでpullが必要です。

$ git log --oneline
50b197d (HEAD -> master, origin/master) Merge pull request #2from shungo0525/revert-1-test1
0373b56 Revert "test1"
44a8c4b Merge pull request #1 from shungo0525/test1
13740b6 (origin/test1, test1) test1
a78da6f initial commit

test1にmasterをmergeします。

$ git checkout test1
$ git merge master
$ git log --oneline # logで確認

50b197d (HEAD -> master, origin/master) Merge pull request #2 from shungo0525/revert-1-test1
0373b56 Revert "test1"
44a8c4b Merge pull request #1 from shungo0525/test1
13740b6 (origin/test1, test1) test1
a78da6f initial commit

ここからがrevertをrevertする手順

$ git revert 50b197d -m 1
$ git log --oneline
2fb9657 (HEAD -> test1) Revert "Merge pull request #2 from shungo0525/revert-1-test1"
50b197d (origin/master, master) Merge pull request #2 from shungo0525/revert-1-test1
0373b56 Revert "test1"
44a8c4b Merge pull request #1 from shungo0525/test1
13740b6 (origin/test1) test1
a78da6f initial commit

そして最後にpush

$ git push

すると無事にPRが出せるようになりました。

おわりに

間違えてしまっても、戻す方法はあるので、落ち着いて対処しましょう。