git commit --amendとgit rebase
過去のコミットを変更する手順で定番(?)のamendとrebaseについてメモ
ただコミットを戻したいだけならこっちの手順で戻せる
直前のコミットを変更する
今コミットしたんだけど、ちょっと修正足りてなかったって時
- 今のコミットがこんな感じであって
$ git log --oneline 21b391b sixth commit 2d7fb42 fifth commmit 9994b0b fourth commit
- ファイル1つ変更してコミットしなおす
$ echo "I forgot it" >> six.txt $ git add six.txt
- amendを使って直前にコミットを変更する
- エディタが立ち上がるのでコミットメッセージを良しなに変更する
$ git commit --amend
- diffを見たら修正が入ってて、コミットのSHA-1が変わってる
$ git diff HEAD~ diff --git a/six.txt b/six.txt new file mode 100644 index 0000000..d2c0e78 --- /dev/null +++ b/six.txt @@ -0,0 +1 @@ +I forgot it $ git log --oneline cbe662c sixth commit 2d7fb42 fifth commmit 9994b0b fourth commit
コミットを遡って変更する
ローカルで数回コミットしたんだけど、マージ前にコミットを格好良くしておきたいって時
- ローカルで3コミット分作業したとする
]$ git log --oneline --decorate f08317b (HEAD, master) eighth commit a094ddf seventh commit 32a88b4 sixth commit 2d7fb42 (origin/master, origin/HEAD) fifth commmit
- 3コミットを1つに纏めたいとすると
- pickはそのコミットをそのまま使う
- squashは一つ前のコミットと纏めて、コミットメッセージを付け直す
- fixupは一つ前のコミットと纏めて、前のコミットメッセージを使う
$ git rebase -i HEAD~3 pick 32a88b4 sixth commit squash a094ddf seventh commit #<< squashに変える squash f08317b eighth commit #<< ここも
- 確認すると
$ git log --oneline --decorate a65c1ac (HEAD, master) sixth..eighth commits 2d7fb42 (origin/master, origin/HEAD) fifth commmit