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」で、きれいにします。

関連情報