はじめに
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. 確認
ブランチを見るとmaster
とtest1
のみで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が出せるようになりました。
おわりに
間違えてしまっても、戻す方法はあるので、落ち着いて対処しましょう。