🏕️
Gitのrebaseを使いこなす:ブランチ履歴を整理して作業を付け直す方法
git rebase
は、あるブランチの基点を別のブランチに付け替えることで、履歴をきれいに整理できる強力なコマンドです。マージコミットを避けて、直線的な履歴を作りたい場合に役立ちます。
例えば、develop
ブランチでから切って作業していたブランチを、staging
ブランチに付け替えることで、「最初からstaging
で作業していたように」見せることが可能です。
git rebase
の基本の書き方
🛠️ git rebase <基点ブランチ>
-
<基点ブランチ>
→ 付け替えたい先のブランチ。
もし、リモートの変更を反映させたい場合は、以下のように実行します:
git fetch origin
git rebase origin/<基点ブランチ>
develop
からstaging
へ付け替え
✅ 例ブランチ構成
以下のようなブランチで作業をしているとします。
a --- b --- c (main)
| \
| d --- e (staging)
\
f --- g --- h (develop)
\
i --- j (feature/login-fix)
-
main
ブランチ:本番環境。 -
staging
ブランチ:リリース準備用。 -
develop
ブランチ:日常的な開発作業。 -
feature/login-fix
ブランチ:develop
から派生し、ログイン機能の修正を行った。
やりたい事
feature/login-fix
ブランチの作業を、staging
ブランチに付け替え、「最初からstaging
ブランチで作業していた」ように見せたい。
具体的な手順
-
作業ブランチに移動
git checkout feature/login-fix
-
リベースを実行
feature/login-fix
の基点をstaging
に変更:git rebase staging
-
リベース後のブランチ構成
リベース後、以下のようになります:
a --- b --- c (main) | \ | d --- e (staging) | \ | i' --- j' (feature/login-fix) \ f --- g --- h (develop)
-
i'
とj'
は、staging
ブランチの上に再適用されたコミット。 - 元の
i
とj
コミットは履歴上からは見えなくなります。
-
⚠️ マージコンフリクト(競合)が発生した場合
rebase
中に競合が発生することがあります。
競合解決の手順
-
競合状態を確認
git status
-
競合部分を修正し、ステージング
git add <修正したファイル>
-
リベースを続行
git rebase --continue
-
もし中断したい場合
git rebase --abort
rebase
を使うのか?
🤔 なぜ✅ 利点
-
履歴が直線的になる →
git log
が見やすくなる。 - 不要なマージコミットを防げる → 履歴がシンプル。
⚠️ 注意点
-
リモートブランチの履歴を書き換える場合は注意
→ 既にプッシュ済みのブランチにrebase
を使う場合は、強制プッシュが必要:git push --force
-
チーム作業時は慎重に → 履歴を書き換えるため、他メンバーの作業に影響する可能性がある。
-
rebase
は履歴をきれいに保つことができる。 - 別ブランチに作業を付け替えたい場合に最適。
- 競合が発生した場合は冷静に対処。
このように、git rebase
を活用すると、あたかも別のブランチで作業していたかのように履歴を整えることができます。プロジェクトの履歴をきれいに保ち、管理しやすくしましょう! 🚀
Discussion