なんでもノート

なんでも書くノートみたいなブログ

マージコミットを revert する

$ git log -n 1 --oneline
45dfc9c (HEAD -> master) Merge branch 'hoge'

マージコミットを revert したい。

$ git revert 45dfc9c
error: commit 45dfc9cee233c97679df476d06e41216d87bafbe is a merge but no -m option was given.
fatal: revert failed

-m オプションを渡す必要があるらしい。

$ git revert -m 45dfc9c
error: option `mainline' expects a number greater than zero

0より大きい数字を渡す必要があるらしい。

$ git revert -m 1 45dfc9c 
Removing hoge.txt
[master 3e3afb1] Revert "Merge branch 'hoge'"
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 hoge.txt

できた。

ちなみに help を見てみる。

$ git revert -h
usage: git revert [<options>] <commit-ish>...
   or: git revert <subcommand>

...

    -m, --mainline <parent-number>
                          select mainline parent

わからん。

git-scm.com

Usually you cannot revert a merge because you do not know which side of the merge should be considered the mainline. This option specifies the parent number (starting from 1) of the mainline and allows revert to reverse the change relative to the specified parent.

1から始まるメインラインの親番号を指定すれば revert できるらしい。 とりあえず、git revert -m 1 <commit-hash> を覚えておこう。