rebase|Git履歴を整える高度なマージ操作の理解と実践
rebase|Git履歴を整える高度なマージ操作の理解と実践
概要
rebase はGitにおける履歴操作コマンドであり、あるブランチのベースを別のブランチに置き換えることで、履歴を直線的に整えることができます。
コードレビュー前後でよく使われますが、誤った使い方はチームの履歴に大きな混乱をもたらします。
rebaseは「内容を変えずに履歴だけをきれいにする」高度な履歴編集操作です。
基本構文と挙動
# mainブランチ上の変更をfeatureブランチに適用
git checkout feature/login
git fetch origin
git rebase origin/mainこの操作により、featureブランチ上のコミットは main の最新履歴を起点に再構築されます。
ブランチを「mainに追いつかせる」目的で使うのが一般的です。
mergeとの違いと使い分け
| 操作 | 履歴の形 | merge commit | コンフリクト解決 | 
|---|---|---|---|
merge | 
履歴が枝分かれする | 発生する | 1回(まとめて) | 
rebase | 
履歴が直線になる | 発生しない | コミットごと | 
履歴を分かりやすく保ちたい場合はrebase、レビューや変更履歴の議論を明確に残したい場合はmergeを選択します。
実務でのrebase活用シーン
- レビュー前に:
mainブランチの最新状態に合わせて差分を明確化 - CIが落ちたときに:他PRの影響を受けている可能性がある場合に再基準化
 - マージ戦略として:SquashマージやRebaseマージ戦略を使う際に事前rebaseを行う
 
会話例:rebase運用中のやりとり
Reviewer: mainが更新されたのでrebaseして差分整えてもらえますか?
Author: 了解です、rebaseしてforce-pushします。Reviewer: 履歴が複雑になっていたのでrebaseして整理しました。レビューしやすくなったと思います。注意点:force-pushとチーム履歴の汚染
rebase は履歴を書き換えるため、pushには--forceが必要です。
これが原因で他メンバーの作業履歴と衝突することがあります。
git push --force-with-leaserebase後のpushはレビューコメントが消えるなどの副作用もあるため、「rebaseしました」と一言コメントを添えることが推奨されます。
rebaseのトラブルと解決策
| 問題 | 解決策 | 
|---|---|
| コンフリクトが複数回発生 | git rebase --abort でやり直す/--skipで無視も可能 | 
| rebase後に差分が不自然 | git log --graph で履歴を視覚確認し、誤rebaseを特定 | 
| コメントがGitHub上で消えた | force-push後はレビュアーに手動で通知する | 
関連用語
merge:ブランチ統合の基本操作。履歴を残すスタイルpush:rebase後のforce-pushは慎重に扱う必要ありpull-request:レビュー前のrebaseで差分を明確化可能
実務視点まとめ
rebaseは「見やすい履歴」を作るための強力なツールですが、慎重な使い方と明示的な運用ルールが欠かせません。
レビュー前に整える/force-push時に一言添える──それだけでチームの信頼とレビューの効率は大きく向上します。