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を使うみたいだけどそれはまた次回