【Git】複数コミットをまとめてrevertする方法


この記事でわかること

  • 特定のコミットまでの全てのコミットをまとめてrevertする方法
  • revertコミットをまとめる方法

特定のコミットまでの全てのコミットをまとめてrevert

数個程度のコミットでしたら普通に

git revert HEAD^

とか

git revert <コミットID>

とかでいいのですが、100コミットとかあった場合は一つ一つやっていたら日が暮れてしまいます

まとめてrevertするには以下のコマンドを使います

git revert HEAD...HEAD~100 --no-edit
  • HEAD...HEAD~100 ... 「今いるコミット」から「100個前のコミット」までを指定
  • --no-edit ... revertコミットのメッセージを編集しない

例えば↓のようなコミット履歴でcommit1~3全てrevertしたい場合は

c59f92d (HEAD -> test) commit3
91cfe7b commit2
32349cf commit1
git revert HEAD...HEAD~3 --no-edit

これで直近3つのコミットを全てrevertできます

e471f93 (HEAD -> test) Revert "commit1"
20f3821 Revert "commit2"
35c18ae Revert "commit3"
c59f92d commit3
91cfe7b commit2
32349cf commit1

が、このままだとrevertコミットが大量にできて履歴が見づらくなってしまうのでrevertコミットをまとめていきます

revertコミットをまとめる

これはrevertコミットに限った話ではないですが

コミットをまとめたいときは以下のコマンドを使います

git rebase -i HEAD~100
  • -i ... エディタを開いて編集できる
  • HEAD~100 ... 直近何個のコミットをまとめるかを指定(今回は100個)

このコマンドを打つと以下のような画面が出てきます

ここでまとめるベースのコミットをpickにしてそのコミットにひっくるめたいコミットはsquashにして閉じると

コミットメッセージの編集画面が出てくるので

適当に編集して

閉じると

c3a9193 (HEAD -> test) commit1~3をrevert
c59f92d commit3
91cfe7b commit2
32349cf commit1

revertでたくさんできたコミットを一つにまとめられます