何個もCommitがあるような一つのPull Requestを全てRevertしたいようなときに使えます。
そもそもRevertとは
あるコミットを打ち消すような、全く逆のコミットを作ることです。
追加した部分を削除して、削除した部分を追加して、変更した部分を変更前の状態にするコミットを作成します。
取り消したいコミットがあるのだけれど、既にリモートにコミットしてしまって、git reset
, git rebase -i
, git reflog
などを使っての取り消しが不可能なときに使います。
通常のRevert
普通のcommitなら、revertは
$ git revert f60f24d
てな感じで、revertしたいcommit(今回はf60f24d
)を指定すれば、実現出来ます。
Merge Commitの場合
ただ、もしf60f24d
がMerge Commitだった場合
$ git revert f60f24d
fatal: Commit f60f24d34845fba4e038b3e165f74973b3a19580 is a merge but no -m option was given.
というエラーメッセージが出ます。
これを解決するには
$ git revert -m 1 f60f24d
という風に-m 1
と付けるだけです。
念のため確認
念のため、ちゃんと目的のものがrevertされているか確認しましょう。
$ git show
あれ、思っている方と違う方がRevertコミットされている!だめじゃん!!と思ったら、
$ git reset --hard HEAD~
で元の状態に戻して、
$ git revert -m 2 f60f24d
という風に-m 2
に変えて試してみましょう。
ちょっと解説
ちなみにこの-m
は--mainline
の略でparent-number
を指定します。
このparent-number
には基本的に1か2を指定すれば良く、git show
をした時に
$ git show f60f24d
commit f60f24d34845fba4e038b3e165f74973b3a19580
Merge: 049d32b ebbcb6a
...
と出たとしたら、1は049d32b
, 2はebbcb6a
を指します。