煙と消えるその前に

一服してるうちに忘れる、自分のための備忘録。とかとか

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