更新日:2026年5月25日
6分で読めます
Gitリベースの機能を活用して、ワークフローを改善する方法をご紹介します。

近年、開発者はマージリクエストのレビューに多くの時間を費やしており、レビュー内容をもとにコードを改善する作業も欠かせません。この記事では、Git rebaseを使ってレビューサイクルを短縮する方法を解説します。まずはワークフローの観点から整理してみましょう。
コードの変更を加えてマージリクエストを作成した後、修正が必要になるケースはよくあります。テストの失敗、バグの発見、レビュアーからの改善提案など、理由はさまざまです。
一つ目の方法は、マージリクエストの元となるブランチの上に新しいコミットをどんどん追加し、ブランチをプッシュしてマージリクエストを更新する方法です。
しかし、この方法で多くのコミットが積み重なると、マージリクエストが扱いにくくなります。
レビュアーにとって理想的なのは、独立した小さなコミットに分割されていて、個別にレビューできる形式です。
マージリクエストの準備や修正をより効果的に行う方法は、各コミットを常に小さく、自己完結した、レビューしやすい単位に保つことです。
つまり、新しいコミットを積み重ねるのではなく、ブランチ内の既存のコミットをすべて整理し直す必要があります。これは複雑で手間がかかるように思えるかもしれませんが、git rebaseがその助けになります。
git rebaseでコミットを整理する小さく自己完結したコミットの積み重ねでマージリクエストを構成するには、ブランチのコミットを大幅に整理する必要があることがあります。コミットの準備が整ったら、ブランチをプッシュしてマージリクエストを作成または更新できます。
ブランチがmainブランチをベースにしている場合、ブランチを整理するコマンドは次のとおりです。
git rebase -i main
このコマンドはとても頻繁に使うことになるので、今すぐGitエイリアスやシェルエイリアス・関数として登録しておくことをお勧めします。
git rebaseに渡す-iオプションは--interactiveの短縮形です。これによりインタラクティブリベースが起動し、エディターが開きます。エディターには、ブランチ内のコミット一覧と、#で始まるコメント行が表示されます。コミット一覧は次のような形式です。
pick 1aac632db2 first commit subject
pick a385014ad4 second commit subject
pick 6af12a88cf other commit subject
pick 5cd121e2a1 last commit subject
各行は、git rebaseがそのコミットをどう処理するかを示す命令です。コミットは古い順に並んでおり、最も古いコミットが先頭に来ます(デフォルトのgit logの表示順とは逆です)。各行の構成要素は次のとおりです。
pick)この命令リストは編集できます。テキストエディターを閉じると、git rebaseが編集された命令を読み込み、順番に実行してブランチを希望どおりに再構成します。
全コミットの命令の後には、コメント行として編集方法と各命令の説明が表示されます。
pickから別のもの(squashやrewordなど)に変更すると、指定した操作がそのコミットに適用されますコメント行の説明だけでは不十分な場合は、以下の資料も参考にしてください。
git rebaseドキュメントの「Interactive mode」セクションインタラクティブリベースは、コンフリクトが発生した場合(通常のリベースと同様)や、命令にeditを使用した場合に一時停止します。一時停止中は、現在のコミットを二つに分割したり、コンフリクトを解消したりといった作業が可能です。その後は次のいずれかを選べます。
git rebase --continueでインタラクティブリベースを続行するgit rebase --abortでリベース全体を中断する(これらのgit rebaseオプションは、通常の非インタラクティブなリベースが一時停止した場合にも使えます。)
各命令行で使える操作を実際に試してみることをお勧めします。特にreword、edit、squash、fixupは便利です。すぐに略語版のr、e、s、fも使いたくなるはずです。
exec <command>という命令を使うと、インタラクティブリベースの任意の時点でシェルコマンドを実行できます。非インタラクティブリベースでの活用が特に便利で、例えば次のように使います。
git rebase --exec 'make test' main
(-iフラグがないので、これはインタラクティブリベースではありません。)
--exec <command>フラグを使うと、リベース済みの各コミットの後にシェルコマンドが実行されます。シェルコマンドが失敗した場合(ゼロ以外の終了コードが返された場合)、リベースはそこで停止します。
make testのようにソフトウェアのビルドとテスト実行を行うコマンドを--execに渡すと、ブランチ内の各コミットが正しくビルドされ、テストをパスするかどうかを確認できます。
make testが失敗するとリベースが停止します。その場で現在のコミットを修正し、リベースを続行して次のコミットのテストに進めます。
各コミットがきれいにビルドされ、すべてのテストをパスすることを確認しておくと、コードベースを常に健全な状態に保てます。リグレッションが発生したときにGit bisectを活用したい場合にも特に有効です。
Gitにおけるリベースは、コミットを整理するための非常に柔軟で強力なツールです。高品質な変更を高品質なコミットとマージリクエストとして提案するワークフローの実現に、ぜひ活用してください。開発者とレビュアーの効率が向上し、コードレビューやデバッグもより容易かつ効果的になります。
追記: このブログの続編として、実際のプロジェクトでリベースを適用する方法も公開しています。ぜひあわせてご覧ください。
このブログ記事を楽しんでいただけましたか?ご質問やフィードバックがあればお知らせください。GitLabコミュニティフォーラムで新しいトピックを作成してあなたの声を届けましょう。
フィードバックを共有する