ブログ
コミット履歴を整える 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を活用してみてください💡
株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!