gitで最後に行ったコミットを修正する


2011年 02月 10日

gitでは様々な方法でコミットログを書き換えることができます。
その一例として最後に行ったコミットを修正する方法を紹介します。

問題

先日紹介したgitで複数のコミットを1つにまとめる例ですが、
実際には最後に行ったコミットだけを修正するケースの方が多いです。

例えば意気揚々と新機能を実装してコミットを行ったとしましょう:

$ git commit -am 'Addd new feature X'

ところが興奮のあまり「d」をタイプしすぎて「Add」が「Addd」になってしまいました。

しかもコミット後の状態を確認してみると:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       lib/x.c
#       lib/x.h
nothing added to commit but untracked files present (use "git add" to track)

上記の通り新たにバージョン管理下に置くべきファイルを追加し忘れているというありさまです。

この場合、ミスを修正するコミットを行って git rebase -i で1つにまとめてしまってもよいのですが、
さすがにこの程度のことで git rebase -i を使うのは面倒臭いです。
どうすればよいでしょうか。

解決方法

git commit --amend を使います。
--amend オプションを使うと最後に行ったコミットを書き換えることができます。

例えばコミットログの入力ミスを直すだけなら以下のコマンドでできます:

$ git commit --amend -m 'Add new feature X'

また、ファイルを追加し忘れた場合の修正なら以下のコマンドでできます:

$ git add lib/x.c lib/x.h
$ git commit --amend -m 'Add new feature X'

ところで git add 忘れのような修正の場合はコミットログはそのままの場合がほとんどです。
-m で毎回同じ値を指定するのは面倒ですし、-m を付けなければエディタが起動して面倒です。
このような場合は

$ git commit --amend -C HEAD

とすることで最後に行ったコミットのコミットログを使いまわすことができます。