git rebase -i でコミットをまとめる


Git でコミットをばんばんやってるとあとでまとめたい時があります。そういった時は git rebase でまとめることができます。
今回は git rebase の使い方を紹介します。

Git rebase でまとめる

直前の3つのコミットをまとめたい時は以下のように指定します。数字の 3 の部分を変更することでまとめたいコミットの数を指定できます。

git rebase -i HEAD~3

実行すると以下のように表示されます。今回はフォームのスタイルを変更したこちらの3つのコミットをまとめていきたいと思います。

pick 8a8e28d changed form checkbox style
pick 3078172 changed form width style
pick a27432a changed checkbox style
# Rebase 697ec71..a274916 onto 697ec71 (3 commands)

squash を指定する

pick は コミットをそのまま取り込み squash または fixup の場合はコミットでの変更内容を直前のコミットにまとめます。
主な違いは squash は rebase でまとめたコミットに新たにコメントをつけることができるのに対して fixup は新たにコメントをつけることができません。
直前のコミットに全てまとめたいのでエディタで編集してまとめたいコミットに squash を指定します。省略して「s」を記述していきます。

pick 8a8e9d6 changed form checkbox style
s 3078096 changed form width style
S a274916 changed checkbox style

編集が終わったら :wq で保存します。
Squash の場合は保存後にコメントの編集に自動的に移ります。

以下のように表示されます。

# This is a combination of 3 commits.
# This is the 1st commit message:
changed form checkbox style
# This is the commit message #2:
changed form width style
# This is the commit message #3:
changed checkbox style

内容をまとめるため、上記の部分を以下のようにコメントを変更して、wqで保存します。

Changed Form styles

保存すると rebase されます。ログを確認すると以下のようにまとまっているのがわかります。

commit 40e6a5414ad7304e9c76d0a49b66f8814339d427
Author: Hoge Taro hogehoge@hoge.jp
Date: Fri Aug 2 21:21:37 2019 0900
Changed Form style

もしすでにリモートリポジトリにプッシュしている場合このままプッシュするとまとめたコミットが存在しないため、プッシュできません。
その場合は git push -f で強制プッシュすれば書き換えることができますが、ブランチを共有している場合は他のメンバーに迷惑になるので注意しましょう

コメントを残す