Gitで後から履歴が見やすいように、コミットをまとめたいときがあります。
そうしたとき git rebase
でコミットをまとめられます。
コミットをまとめる
# ログを確認
$ git log --oneline
# a23f186 Add piyopiyo <- このコミットと
# 85f004e (origin/develop) Change hogehoge <-このコミットをまとめたいなら
# 18f26a5 Update fugafuga <- このコミットIDをコピー
# ...
# インタラクティブモードで開く
git rebase -i <コピーしたID>
git rebase
は履歴が気に入らないから変更するときのコマンドです。
i
はインタラクティブモードでコミットを修正できます。
vi で開くので、コミットで必要なメッセージを消したり処理していきます。
# git log --oneline と逆順(新しいコミットほど下)で、最新のコミットまで履歴が表示される
pick 85f004e Change hogehoge <- 一番上(古い)のpickはそのまま
pick a23f186 Add piyopiyo <-まとめたいコミットはpickをsに変更
まとめたいコミットが多い場合は、 Shift+v
で範囲選択→:
→s/置換対象文字列(pick)/置換後文字列(s)/gc
→Enter
等で置換すると楽です。
# GitHubの変更点と比べて問題ないか確認
$ git log -p
最後にプッシュして終わりです。
git push origin foo --force-with-lease
まとめるコミットを間違えた場合
git reflog
で
0c2faef (HEAD -> feature-ar-kit) HEAD@{0}: reset: moving to HEAD@{7}
dca12e6 HEAD@{1}: rebase -i (finish): returning to refs/heads/feature-ar-kit
dca12e6 HEAD@{2}: rebase -i (squash): Update for Android build
73a993f HEAD@{3}: rebase -i (squash): # This is a combination of 3 commits.
54836a8 HEAD@{4}: rebase -i (squash): # This is a combination of 2 commits.
13076fd HEAD@{5}: rebase -i (start): checkout 8690d54
33c3f76 HEAD@{6}: rebase -i (finish): returning to refs/heads/feature-ar-kit
33c3f76 HEAD@{7}: rebase -i (squash): Update to implement eyeball and body angle x z move