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

Tags of current page