はじめに
git rebase ~というコマンドは使ったことありますか?
私は今の会社に入社してから使うようになったのですが、それまで全く聞いたことありませんでした。
今回はgit rebaseコマンドの主な使い方について、解説していきます。
git rebaseはどんな時に使うの?
git rebaseを使うメリットは主に以下の3点です。
1. きれいなコミット履歴が残せる
rebaseを使えば、コミット履歴を整理できます。
たとえば、複数の小さなコミットをひとつにまとめたり、必要のないコミットを削除したり、コミットメッセージを修正したりできます。
コミット履歴がきれいでわかりやすいと、後から履歴を追ってコードの変更を追跡しやすくなります。
また、レビューをするときにコミット単位で確認できるので、変更点が一目でわかりレビューが効率化されます。
2. マージコミットを減らせる
通常、ブランチをマージする際はマージコミットが発生します。
しかしrebaseを使えば、ブランチ間の統合時にマージコミットが発生しません。代わりに、ブランチのコミットがまとめて付加されます。
マージコミットが減ることで、コミット履歴がスムーズで見やすくなります。
特に長期間同じブランチで作業を続けた場合、通常のマージではマージコミットが大量に発生してしまいコミット履歴が雑多になってしまいます。
3. 作業を進めやすくする
rebaseで他のブランチの変更を取り込むと、自身のブランチの変更に影響が出にくくなります。
つまり、コンフリクトが起きにくくなるのです。
一方、git merge でブランチを統合すると、自身のブランチとマージ先のブランチの両方の変更が取り込まれるため、コンフリクトが起こりやすくなります。
rebaseではそのようなコンフリクトが起きにくい分、作業が中断されるリスクが低くなります。
ただし注意点として、rebaseではコミット履歴が書き換わるので、公開済みのブランチで使うと問題が発生する可能性があります。
そのため、プライベート(ローカル)ブランチで作業している間のみrebaseを使い、最終的には通常のマージを行うのがベストプラクティスとされています。
「コミットまとめて」と言われた時の手順
1. プライベート(ローカル)のmainリポジトリを最新化
git checkout main
git pull
2. topicブランチに移動
git checkout ${topic}
3. topicブランチのコミットを一つにまとめる
git rebase -i HEAD~${ブランチに対するコミット数}
ex. コミット数が4つの場合:git rebase -i HEAD~4
4. vimが開くので、一番上以外のものをpick→sに書き換える
5. :wq で保存
6. mainブランチにrebase
git rebase main
7. コミット履歴を確認:origin/mainに今回のPRのcommitが1つだけあること
git log -2
8. 強制(force)プッシュ
git push -f origin ${topic}
さいごに
git rebaseは非常に強力なツールですが、公開リポジトリで使用する場合は細心の注意を払う必要があります。rebaseではコミット履歴が書き換えられるため、他の人が同じブランチを共有している場合、予期せぬ問題が発生する可能性があるからです。
そのため、個人で進行中の作業ブランチでのみrebaseを使用し、共有リポジトリに反映する際は通常のマージを行うようにしましょう。
上記の作業は全て作業ブランチでrebaseを行い、コミットをまとめたものになります。
rebaseを適切に使いこなせば、きれいでわかりやすいコミット履歴を残すことができ、開発効率が大幅に向上します。
一方で、軽率に扱うと、最悪の場合作業そのものを台無しにしかねません。
ぜひrebaseの便利な機能を活用しつつ、その危険性も理解して適切に使い分けていきましょう。
きれいなコミット履歴を残せるだけでなく、チームで作業する上でのリスクも最小限に抑えられます!