はじめに
rebaseを使いこなせていなくて、余分な手作業をしていたので備忘録。
1. 基本的なrebase
(1) 状態
materからbranchAとbranchBを作成。各ブランチでコーディングを進めている。
master - commit1
|__ branchA - commit2
|__ branchB - commit3
(2) リベースコマンド
branchAがmasterにリベースされた後、branchBをmasterにリベースする。
$ git rebase master branchB
(3) リベース前後のコミット履歴
※太字がbranchBの持つコミット履歴
リベース前
commit1 - commit3
リベース後
commit1 - commit2 - commit3
2. ontoを用いるrebase
(1) 状態
masterからbranchAを作成。commit2を作成した後に、branchAからbranchBを作成。
master - commit1
|__ branchA - commit2 - commit3
|__ branchB - commit4
(2) リベースコマンド
branchAがmasterにリベースされた後、--onto optionでbranchBをmasterにリベースする。
$ git rebase --onto master branchA branchB
(3) リベース前後のコミット履歴
※太字がbranchBの持つコミット履歴
リベース前
commit1 - commit2 - commit4
リベース後
commit1 - commit2 - commit3 - commit4
※このケースで$ git rebase master branchB
としてしまうと、リベース後のコミット履歴が、このようなおかしなことになってしまい、不毛なコンフリクト解消手作業が発生してしまう。
commit1 - commit2 - commit3 - commit2 - commit4
補足
・ --onto optionは、git reset --hard
と同じ効果(コミット履歴がリセットされる)がある。利用するメリットとしては、余分なコミット履歴を出させないことで、プルリクエストを出す時に履歴が追いやすいことにあるかと思います。
・ 各ブランチを最新の状態にするのを忘れずに・・・。