git rebase - 複数のコミットを改変してまとめる
git rebaseコマンドは、複数のコミットを改変してまとめるコマンドです。新しく作成されたコミットは、派生元のブランチの先に、ファストフォワードでマージできます。
git rebase 派生元のブランチ
mainブランチから分岐したfooブランチを作成して、コミット「A」「B」「C」と進んだとします。派生元のmainブランチを「git rebase」で指定すると、複数の「A」「B」「C」をまとめた一つのコミットが作成されます。これは、mainブランチにマージしたときに、ファストフォワードでマージできます。
git rebaseは、コミットを改変してまとめるコマンドなので、リポジトリを壊す可能性のあるコマンドです。git branchで、git rebase用の作業ブランチを作成するのがお勧めです。
git branch foo_rebase git checkout foo_rebase
「git push」したものに対しては「git rebase」しない
「git rebase」の注意点は、「git push」したものに対しては「git rebase」しないというものです。pushしていないブランチに対してだけ「git rebase」します。
けっきょく「git rebase」はどんな時に使いたいの?
一つ目は、ブランチを派生させて、小さな変更を積み重ねて、どんどんコミットをして、保存しながら、開発しているとします。コミットは、保存という用途もあるので、小さく保存しておきたいという要望があります。
ただし、この場合は、マージは、とても粒度が小さく、機能単位のコメントにはなっていません。マージされる側から見ると、履歴はすっきりしないものとなるでしょう。
このような場合は「git rebase」することで、履歴がきれいになります。
一例をあげておくと、僕の場合は、一般的には、エンドユーザー向けのWebアプリケーション開発では、git mergeマージを使います。履歴をきれいに維持することは、あまり求められない場合です。また、オープンソース開発で、自分の変更をマージしてもらう場合は「git rebase」で、きれいにします。