この記事でわかること
- 特定のコミットまでの全てのコミットをまとめて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~3
-i
... エディタを開いて編集できるHEAD~100
... 直近何個のコミットを編集するかを指定
このコマンドを打つと以下のような画面が出てきます

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

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

適当に編集して

閉じると
c3a9193 (HEAD -> test) commit1~3をrevert
c59f92d commit3
91cfe7b commit2
32349cf commit1
revertでたくさんできたコミットを一つにまとめられます
ちなみに、rebase
したときにpick
とかsquash
とか書きましたが、それぞれp
、s
みたいに頭文字だけに省略もできます