基本的な使用方法
git rebase -i <対象コミット>
履歴の確認と編集開始
# 最新の3つのコミットを編集
git rebase -i HEAD~3
# 特定のコミットを起点に編集
git rebase -i abc1234
エディタ画面の構成
エディタが開くと以下のような表示になります
pick f7f3f6d 機能Aの実装
pick 310154e バグ修正
pick a5f4a0d タイポ修正
# Commands:
# p, pick = コミットをそのまま使用
# r, reword = コミットは使用、メッセージを編集
# e, edit = コミットで停止、内容を修正
# s, squash = 前のコミットと結合、メッセージも結合
# f, fixup = 前のコミットと結合、メッセージは破棄
# d, drop = コミットを削除
主要なアクション
複数コミットの結合(squash)
pick f7f3f6d 機能Aの実装
squash 310154e バグ修正
squash a5f4a0d タイポ修正
コミットメッセージの変更(reword)
reword f7f3f6d 機能Aの実装
pick 310154e バグ修正
pick a5f4a0d タイポ修正
コミット内容の修正(edit)
edit f7f3f6d 機能Aの実装
pick 310154e バグ修正
pick a5f4a0d タイポ修正
開発での使用
# フィーチャーブランチで作業
git checkout -b feature/user-auth
# 段階的なコミット作成
git add src/login.js
git commit -m "ログイン機能のベース実装"
git add src/validation.js
git commit -m "入力バリデーション追加"
git add src/login.js
git commit -m "認証ロジック完成"
git add tests/auth.test.js
git commit -m "ユニットテスト追加"
git add src/login.js
git commit -m "バグ修正"
# コミット履歴を整理
git rebase -i HEAD~5
エディタでの編集例
pick abc1234 ログイン機能のベース実装
squash def5678 入力バリデーション追加
squash ghi9012 認証ロジック完成
fixup jkl3456 バグ修正
pick mno7890 ユニットテスト追加
この編集により、機能実装に関する4つのコミットが1つにまとまり、テストコミットは独立して残ります。
注意事項とトラブル対応
ISSUE - 課題
共有ブランチでのリベースは禁止です。他の開発者がすでに使用しているブランチで履歴を変更すると、プロジェクト全体に影響を与えます。
安全な使用範囲
# ❌ 危険:共有ブランチ
git checkout main
git rebase -i HEAD~3
# ✅ 安全:個人のフィーチャーブランチ
git checkout feature/my-work
git rebase -i HEAD~3
コンフリクトの解消
# コンフリクト発生時
git status
# コンフリクトファイルを手動で解決
git add <解決済みファイル>
git rebase --continue
# リベースを中止する場合
git rebase --abort
ワークフローへの組み込み
プルリク前の準備
# 作業完了後、履歴を整理
git rebase -i HEAD~10
# リモートブランチと同期
git fetch origin
git rebase origin/main
# プルリク作成
git push origin feature/user-auth