リベースとは
履歴をきれいにしつつ、変更を統合するのがリベースです。
コマンド
- git rebase "ブランチ名"
リベース元の履歴がリベース先のブランチの後ろに追加される形で一本化されます。
仮にブランチが「master」と「feature」の2つがあったとします。
(改修などを行う作業ブランチはfeatureと名付けるところが多いよ!)
featureで作業していてmasterに変更がありました。
featureにmasterの変更を取り込みたい場合、通常はmasterをfeatureにマージして取り込みます。
その場合、コミット状況が以下のようになります。
これをgit rebase masterで行うと以下のように一本化された状態になります。
mergeであれば、featureコミット3の親コミットはmasterコミット1ですが、rebaseを使用する事によって、featureコミット3の親コミットが、masterコミット2となります。
コミット履歴を変更する方法
GitHubにPushする前に、コミット履歴をきれいにする場合に使用します。
- git rebase -i "コミットID"
- git rebase -i HEAD~3 (直前のコミットから3つ前を変更)
修正する際の流れ
- git rebase -i で修正対象を選択する。修正するものに関しては、pick→editのように書き換える。
- git commit --amend で直前のコミットを修正する。
- git rebase --continueで次のコミットに移動する。移動先がない場合、完了。
コミットの順番を入れ替える
git rebase -i "コミットID"を使用すると、エディタが立ち上がり、履歴が表示されます。 ファイルを編集して、入れ替えればOKです。
コミットをまとめる
git rebase -i を使用して表示されたファイルに、まとめたいものに対して、pick→squashを使用すれば、指定したものをすべてまとめることができます。
コミットを分割する
- git rebase -i "コミットID"
- 対象のコミットをeditに変更
- git reset HEAD^ でコミットを取り消す
- git add と git commitで分割したい単位でコミットし直す。
- git rebase --continueで終了