Gitでコミットをやり直す方法 (パッチ編)

う〜ん、困った。
あるコミットはUTF-8、またあるコミットはEUC-JPでログを書くなんて…。

修正しようにも

$ git rebase -i

では文字化けてしてまってうまくいかない。

ちょっと大げさかもしれないけど、次の方法で修正する。

既存コミットのパッチに書き出す

第1引数にはパッチを作成し始めるコミットを指定する。
今回はすべて書き出すのでmasterを指定。

$ git format-patch master

コマンドを実行するとその場にパッチを作成しようとするので要注意。
patchesなど適当なディレクトリに移動しておくべし。

問題のパッチを修正

さて、以下のようなパッチファイルができた。

$ ls -1
0001-FIXME-xxx-xxx-xxx.patch
0002-FIXME-xxx-xxx-xxx.patch
0003-FIXME-xxx-xxx-xxx.patch
0004-FIXME-xxx-xxx-xxx.patch
0005-FIXME-xxx-xxx-xxx.patch
0006-FIXME-xxx-xxx-xxx.patch
〜 略 〜

中身はメールと同じ書式で、コミットログとファイルの差分が含まれる。
ここでは、問題のあるコミットログを修正する。

新しいブランチにパッチを適用

まずはパッチを適用する新しいブランチを作成、チェックアウト。
masterからのパッチなのでmasterを元にする。

$ git branch new_branch master
$ git checkout new_branch

最後にamコマンドでパッチを適用。

$ git am *.patch

おしまい♪