git rebase 使い方
ブランチの派生元を変更する
ブランチ experimental が master から派生したとする。 このとき、master が更新されたとき、 rebase を使って experimental の派生元を更新された master にすることができる。
git rebase master
rebase を実行するときに、コミットのリストを作り、 各コミットについて処理を指定するには「-i」オプションを使う。
git rebase -i master
rabase のコンフリクトを解消して作業を続ける
コンフリクトが起こったら、該当のファイルを修正して
git add <file>
とし
git rebase --continue
とする。
rebase を止めて元に戻す
git rebase -i HEAD~5
などとして rebase を実行したけれど、 止めて元に戻したくなったときは、
git rebase --abort
とする。
過去のコミットを完全になかったことにする
push 前のコミットを revert するのではなく、完全に消したくなることがある。 直前のコミットなら git reset を使うこともできる。 すでに push したコミットに対して実行すると 履歴がおかしくなって push できなくなるので注意。
rebase を -i オプションとともに実行して コミットをどうするかを設定するところで 行そのものを消す。具体的には
git rebase -i HEAD~5
として、該当のコミットの
pick e56599f COMMIT_MESSAGE
のようになっている一行を消して進めば良い。
コミットの順番を入れ替える
HEAD~5 以降のコミットの順番を入れ替えたいなら
git rebase -i HEAD~5
として、rebase でコミットをどのように扱うかを決めるところで 順番を入れ替える。
たとえば
pick 530600d commit1
pick b76eb4f commit2
pick f3bd900 commit3
pick 1709b89 commit4
pick 21d76b7 commit5
を
pick 530600d commit1
pick b76eb4f commit2
pick 1709b89 commit4
pick 21d76b7 commit5
pick f3bd900 commit3
とすると commit3 が一番最後になる。
最初のコミットを git rebase -i の対象にする
たとえば、現在のブランチに10個のコミットがあって、その最初のコミットを修正したいとき
git rebase -i HEAD~10
のように指定しても最初のコミットは対象にならない。 –root オプションをつけて実行する。
git rebase -i -root
これは現在のブランチでたどることができるすべてのコミットが対象になる。
参考
- man git-rebase