【Git入門】git rebaseでコミットログを整理しながら変更をまとめる

  • 2026.02.20
       
【Git入門】git rebaseでコミットログを整理しながら変更をまとめる

今や、プロジェクト開発を行う上で欠かせない Gitですが、規模の大きいプロジェクトほどコミット履歴が複雑化しがちで、過去の内容を追う際に一苦労した・・・といったケースも少なくはありません。

そこで今回は、履歴を整理する上で役に立つコマンドである 「git rebase」 コマンドについて解説していきたいと思います。
基本的な使用方法から使う際の注意点まで、細かく説明していきますのでぜひ参考にしてみてください!

git rebaseとは?

git rebaseコマンドは、ブランチの基点となるコミット(親コミット)が示す位置を、別の箇所へと変更するコマンドです。
コマンドを使用することにより、複数のブランチの履歴を1つにまとめたり、ブランチ内のいくつかのコミットを1つのコミットとしてまとめたりすることができます。

主に、開発の過程で煩雑化してしまいがちなコミット履歴を整理するために活用されています。

git rebaseの使い方

git rebaseコマンドの主な使用方法は、先ほど解説した以下の2点です。

  • 複数のブランチの履歴を1つにまとめる
  • ブランチ内の複数のコミットを1つのコミットとしてまとめる

それぞれの方法について、順に見ていきましょう。

複数のブランチのコミットを統合する

まずは、複数のブランチの履歴を1つにまとめる方法から解説します。

例えば以下のように、特定の地点から分岐した「ブランチA」と「ブランチB」があるとします。

通常、一方のブランチの内容を別のブランチに取り込む際に行われるのは git merge コマンドです。
その場合のコミット履歴は以下のように表示されます。

これを、git rebase コマンドで実行すると、以下のような履歴に変わります。

mergeの場合とは異なり、履歴が一直線に繋がった状態で整理されるのが特徴です。
分岐した履歴を完全に残したい場合は mergeが適していますが、反対に、分岐ごとに履歴が膨らむのを阻止したい場合には rebaseが適しています。

git rebase コマンドでブランチを統合する際は、内容をまとめたい作業ブランチに移動した後、統合元となるブランチを指定してコマンドを実行します。

Bash
# ブランチBをブランチAにまとめる場合
git checkout ブランチB
git rebase ブランチA

rebaseコマンドを実行することで、統合元のブランチで fast-forwardマージが実行できる状態になります。

同一ブランチ内の複数コミットを一つに統合する

続いて、ブランチ内の複数のコミットを1つにまとめる方法を解説します。

git rebase コマンドで任意のコミット同士をまとめる場合は、-i オプションを使用します。

Bash
git rebase -i コミットID

コミットIDは、最新のコミットから遡って 「統合したいコミット数 +1」 の箇所にあるIDを指定します。

例えば以下のように、分岐元から現在の最新コミットに至るまでに、合計で4つのコミットがあるとします。

上記の履歴のうち、A〜Dまでのコミットを1つにまとめたい場合は、分岐点となるコミットのIDを指定します。
指定は、「HEAD~{n}」 の形式でも可能です。

Bash
git rebase -i HEAD~4

コマンドを実行すると、以下のようにエディタが開かれ、各コミットをどのように処理するかを聞かれます。

上記画像にもあるように、選択可能な処理内容がコンソールに表示されているので、任意のコマンドを選択して編集します。
例えば、4つのコミットを1つにまとめる際は次のように編集します。

Plaintext
pick f683796 発展編
squash cd5deb4 addの説明を追加
squash 18647eb commitの説明を追加
squash e3e6b1e pullの説明を追加

編集内容を保存してエディタを閉じると、指定内容に従って rebaseが実行されます。
コメントの編集などが必要な場合は、rebase後に続いて処理が実行されるので対応しておきましょう。

rebaseとmergeの使い分け

複数のブランチの内容を1つに統合する場合、mergeコマンドと rebaseコマンドの2通りの方法があります。
先ほども解説したように、それぞれのコマンドによってブランチの履歴に違いが発生しますが、最終的な成果物には変わりがありません。

では、具体的にこの2つのコマンドはどのように使い分けていくといいのでしょうか?

チームで共同開発しているプロジェクトの場合

共同で1つのプロジェクトを開発している場合、リモートブランチとローカルブランチのコミットの状態には頻繁にずれが生じます。
そのため、都度リモートの最新状態をローカルに取り込んだり、自身が作成したブランチをリモートにプッシュして開発内容を共有していくのが一般的な開発の流れです。

リモートにプッシュしたブランチは、コードレビューがされていたり、別ブランチの分岐元になっていたりと、他の開発者の作業環境にも影響を与えていることがままあります。
このようなケースの場合、既存のコミットの履歴を書き換える rebaseコマンドを使用するのは危険です。

基本的に、既にコミット内容がプッシュされているブランチに対しては rebaseコマンドを実行しないようにしておきましょう。
具体的には、以下の基準で mergeコマンドと使い分けることをおすすめします。

  • ブランチが既にプッシュ済みか否か … プッシュ済みの場合は margeのみ
  • 分岐したコミット履歴をそのまま残す必要があるか否か … 残す場合は marge、残さない場合は rebase

万が一、プッシュ済みのブランチに対して rebaseコマンドを使用する場合は、ブランチが完全に自身のみの開発で完結しているかを確認してから実行するようにしましょう。
ただし、rebase後の再度プッシュは通常の pushコマンドではエラーが発生してしまうため、-f オプションを付けて強制プッシュする必要があります。

Bash
git push -f origin feature

rebaseの使いどころ

rebaseコマンドの利点は、既に解説したようにコミットの履歴を見やすい状態に整頓することができる点です。
実際の開発においては、作業中のブランチにメインブランチの更新状態を取り込むケースなどでよく活用されています。

Bash
git checkout feature
git rebase master

コミット履歴を事前に一本化しておくことで、リモートにブランチをプッシュした際に視覚的にコミットの状態が理解しやすくなります。
履歴が複雑化しやすい大規模開発などで特に役立つコマンドです。

まとめ

いかがでしたか?今回は、git rebase コマンドの使い方について解説しました。

既存の履歴を書き換えてしまうため、使用の際には細心の注意が必要なコマンドですが、使いこなせれば便利なものでもあります。
まずは、自身の環境で試しに練習してみて、実践に慣れていくといいでしょう。

Gitの勉強方法は?

書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。

ただ、Gitに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。

プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。

<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~

このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。

     

Otherカテゴリの最新記事