はじめに
開発中に「あ、ここ修正するの忘れてた!」ってなること結構ありますよね。そして、その追加修正分は、できれば3つとか4つ前のコミットに含めたいことが結構あります。
そんな時、自分は一々git reset
してコミットを作り直していたのですが、そんなことをしなくても以前のコミットに後から修正を加えることができることが分かったので、メモしておきます。
やり方
現在のコミットログが以下のようになっているとします。この時memo.txt
に修正漏れがあった時を想定します。
commit dc3baf27713ea6ade5f61fe6dc4e94c3befca653 (HEAD -> master)
Author:
Date: Sun Dec 20 19:01:26 2020 +0900
todo.txtを修正
commit 50461e0ec0822cd21873c262f8322d203d6dc0a6
Author:
Date: Sun Dec 20 19:01:07 2020 +0900
memo.txtを修正
commit efe706a19014573c06666a88a1251069b8ce7763
Author:
Date: Sun Dec 20 18:54:39 2020 +0900
memo.txtを追加
todo.txtを追加
まずは、いつも通りmemo.txt
に追加の修正を行い、git add
を行います。そして、コミットを作成するときにgit commit --fixup <修正したいコミットID>
というコマンドを利用します。今回の場合はmemo.txt
に修正を加えたいので、コミットIDは50461e0ec0822cd21873c262f8322d203d6dc0a6
になります。
すると、「fixup! memo.txtを修正」というコミットメッセージがついたコミットが作成されます。
git add memo.txt
git commit --fixup 50461e0ec0822cd21873c262f8322d203d6dc0a6
[master db42469] fixup! memo.txtを修正
1 file changed, 1 insertion(+)
そして最後に、git rebase -i --autosquash <修正したいコミットの1つ前のコミットID>
というコマンドを実行します。今回の場合はefe706a19014573c06666a88a1251069b8ce7763
が対象になります。見慣れない画面が立ち上がりますが、:wq
で上書き保存してOKです。すると、「memo.txtを修正」以降のコミットIDが変わり、後から加えた修正がちゃんと加わっているのがわかります!
最後に
原理はまだ完全には理解できていないですが、とても便利だと思ったので備忘録として残しました。詳しい仕組みはこれから理解して行こうと思います。