ブログ


コミット履歴を整える git rebase
Gitを使って開発をしているときに「複数の小さなコミットを1つにまとめたい」ことや、「コミットメッセージを修正したい」と思うことがあります。そんなときに使えるのがgit rebase
です。
今回は git rebase
でコミット履歴を整理する方法をご紹介します!
コミットを1つにまとめる
「複数の小さなコミットを1つにまとめたい」時にgit rebase -i
を使って複数のコミットを統合(squash)できます。
手順
git log --oneline
でコミット履歴を確認します。
789ijkl 修正コミットC
efgh456 コミットメッセージB
123abcd コミットメッセージA
直近の3コミットを1つにまとめることを想定して、git rebase -i HEAD~3
を実行すると、エディタが開き、下記のように表示されます。
pick 123abcd コミットメッセージA
pick efgh456 コミットメッセージB
pick 789ijkl 修正コミットC
下記のように修正します。(「squash」は「s」の省略形でも表記可能です。)
pick 123abcd コミットメッセージA
squash efgh456 コミットメッセージB
squash 789ijkl 修正コミットC
修正後に保存すると、次にコミットメッセージのエディタが下記のように開きます。
# This is a combination of 3 commits.
# This is the 1st commit message:
コミットメッセージA
# This is the commit message #2:
コミットメッセージB
# This is the commit message #3:
修正コミットC
最終的に残すコミットメッセージに書き換えます。
# This is a combination of 3 commits.
# This is the 1st commit message:
コミットメッセージABC
# This is the commit message #2:
# This is the commit message #3:
保存して終了すると、複数のコミットが1つにまとまります。再度git log --oneline
を実行することで変更されたことを確認することができます。
opqr012 コミットメッセージABC
コミットメッセージを修正する
「コミットメッセージを修正したい」時もgit rebase -i
を使います。
手順
git log --oneline
でコミット履歴を確認します。
今回は特定のコミットメッセージをピンポイントで修正することを想定して、コミット履歴から修正したいコミットの一つ前のコミットIDを確認します。
mnop012 コミットメッセージD
789ijkl 修正コミットC <-修正したい
efgh456 コミットメッセージB
123abcd コミットメッセージA
コミットIDが「789ijkl」のものを修正したいので、git rebase -i efgh456
を実行します。すると、エディタが開いて下記のように表示されます。
pick 123abcd コミットメッセージA
pick efgh456 コミットメッセージB
pick 789ijkl 修正コミットC <-修正したい
下記のように修正します。(「reword」は「r」の省略系でも可)
reword 789ijkl 修正コミットC <-修正したい
pick efgh456 コミットメッセージB
pick 123abcd コミットメッセージA
すると、コミットメッセージのエディタが開くので、コミットメッセージを書き換えます。
最後にコミットメッセージの内容が変わっているかをgit log --oneline
で確認します。
mnop012 コミットメッセージD
789ijkl 修正コミットCC
efgh456 コミットメッセージB
123abcd コミットメッセージA
注意点
すでにプッシュしているコミットへの修正を行った場合、git push
だけではプッシュができません。そのため、git push --force
で強制的に上書きする必要があります。チームで開発している際は、git push --force
を使用する前に開発メンバーに確認したり相談して使用することをお勧めします!!
まとめ
git log --oneline
でコミット履歴を確認git rebase -i HEAD~3
で直近のコミット3つを編集できるgit rebase -i [コミットID]
で特定のコミットよりも後のコミットを編集できるsquash
を使えば、複数のコミットを1つにまとめられるreword
を使えば、過去のコミットメッセージ修正できる- チーム開発の際は
git push --force
を慎重に使用すること
今回はgit rebase
を活用した、コミット履歴の整える方法についてご紹介しました。無駄なコミットを減らし、美しいコミット履歴を維持したいときはgit rebase
を活用してみてください💡
株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!