🏕️
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