git rebase
git rebaseは、ブランチを統合して履歴を付け替えるコマンドです。
イメージ
【リベース前】
E---F---G (topicブランチ)
/
A---B---C---D (masterブランチ)
【リベース後】
E'---F'---G' (topicブランチ)
/
A---B---C---D (masterブランチ)
構文
- (構文)
- git rebase [オプション] [値]
オプション | 説明 |
---|---|
-i | 対話モードでリベースを行う |
--abort | リベースをキャンセルする |
--continue | リベースを続ける |
--help | コマンドのヘルプを表示する |
サンプル
masterブランチに、ブランチ「eda01」と「eda02」をリベースする
git checkout eda01
git rebase master
git checkout eda02
git rebase master
eda01、eda02ブランチにチェックアウトした上でリベースするのがポイントです。
コミットをひとまとめにする
git rebase -i [ひとまとめにしたいコミットの一つ手前のコミットID]
コミットIDは、git logコマンドで確認できます。
実行すると統合されるコミットの一覧がvimで表示されるので、統合したいコミットの"pick"を"squash"に変更します。
(変更前)
pick XXXXXXX コミット1
pick YYYYYYY コミット2
pick ZZZZZZZ コミット3
↓
(変更後)
pick XXXXXXX コミット1
squash YYYYYYY コミット2
squash ZZZZZZZ コミット3
一番最後のコミットはpickのままにしておくのがポイントです
リベースをキャンセルする
git rebase --abort
リベースを続ける
git rebase --continue
git rebaseでコンフリクトが発生した場合、解消後に続きを行いたい時に使用します。
備考
- rebaseの実行は、分岐先ブランチをカレントにした上で行います。
(例)masterから分岐したeda01をmasterにリベースしたい場合は、eda01ブランチ上で行う - vim中のコマンドについては、以下ページをご覧ください。
⇒ viコマンド - リベースを実行してもブランチの先頭は取り込まれたブランチの先頭のままです。
関連項目
- git merge:現在の作業ブランチに他のブランチの更新内容を統合して履歴を合流させる