git rebase -iの使い方覚書

git rebaseすごい。git rebaseすごい(二度目

## HEADから2つ前までのリビジョンが対象
$ git rebase -i HEAD~2

コマンド実行するとエディタに次のように表示される

pick 4ac8a6e homuhomu
pick 6cf15e3 homuhomuhomu

# Rebase 8ae65b7..6cf15e3 onto 8ae65b7
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

行頭のpickとなっているとことにCommandsのいずれかを入力するとそれに応じた処理が実行出来る
execはよくわかんない。またあとで

p,pick

コミットをそのまま使用する。つまり何も変更しないってこと

r,reword

コミットコメントだけ変更する

e,edit

editを選択するとこんなメッセージが表示される

You can amend the commit now, with

	git commit --amend

Once you are satisfied with your changes, run

	git rebase --continue
A---B---C---D---E

git showするとコミットEになってる状態でCのコミットをeditにする
git showするとCのコミットになっていることがわかる

コミットを--amendで修正した後にgit rebase --continueをするとコミットD,Eが適応される

s,squash

1つ前のコミットに統合する。コメント編集用にエディタが開くので編集する

f,fixup

1つ前のコミットに統合するのはsquashと同じだが、こちらはコメントを編集できず統合先のコミットのコメントが採用される



rebaseで失敗した際にはORIG_HEADだったりreflogを使うみたいだけどそれはまた次回