git commit --amend と git rebase で コミットを修正する
作業をしている際に、直前のコミットに入れ忘れた修正を思い出し、今の手元の修正も一緒に一つ前のコミットに含めたい、という時があります。その際の操作方法をまとめます。
直前のコミットに手元の修正を含めたい場合
最初に、コミット1、コミット2という2つのコミットを用意しておきます。
そして手元で加えた修正を、直前のコミット2に加えたいという場面を想定します。
この場合、
まず、git add .
でステージにあげます。
そしてgit commit --amend
をすると次のような画面が表示されます。
ここで、コミットメッセージに変更を加える場合は変更をします。今回はコミット2のままとします。
この画面は vim 操作が必要で、i
を押すと入力することができ、esc
キーで通常のモードに戻ります。そして、:wq
で保存をして閉じることができます。
そうすると、コミット2に手元の変更を加えることができます。(コミット番号が変わっています。)
コミットの内容は変えず、メッセージを変更したい場合
またコミットの内容は変えずに、コミットメッセージを変えたい場合は、次のようにします。
git commit --amend -m "変更したいメッセージ"
今回はコミット2 というメッセージを コミット3に変更してみます。
git commit --amend -m "コミット3"
すると、コミットメッセージが コミット2から コミット3に変わっています。
2つ以上前のコミットを修正したい場合
コミットを6まで追加します
git rebase -i HEAD~5
これで最新から5つ遡ったコミットを表示できます。
i
で入力モードに切り替え、コミットの横の pick
を edit
に変更し、:wq
で閉じます。
そうすると、edit
にしたコミットが最新のコミットの状態になります。
git commit --amend
でコミットメッセージを修正して保存します。
ここではコミットメッセージ2を修正しました
と打ちます。
そして、git rebase --continue
を使うと、変更が反映されます。
Discussion