履歴を再編集して間違いを訂正する で見てきたように直前のコミットを 以下のようにして修正することができます。
$ git commit --amend
この操作は、過去のコミットをあなたが変更を受け入れる新しいコミットに 置き換え、過去のコミットメッセージを編集する機会を与えてくれます。
これと git-rebase(1) を組み合わせることで、履歴内のさらに過去のコミットについても 置き換えをし、その先頭の変更に立ち入ることができます。 初めに、次のようにして問題のあるコミットにタグを付けます。
$ git tag bad mywork~5
(gitk または git log
が問題のあるコミットを見つけるのに役立ちます。)
そのコミットをチェックアウトして編集し、残りの一連の変更を その先頭にリベースします(ここでは 引き剥がされたhead を 使用する代わりに、一時的なブランチ上にコミットをチェックアウトします。):
$ git checkout bad
$ # ここで変更と索引の更新をします
$ git commit --amend
$ git rebase --onto HEAD bad mywork
これらを行なった後、チェックアウトした mywork が保たれ続け、mywork 上の 先頭のパッチは修正したコミットの先頭に再適用されます。 そして、これらを片付けることができます。
$ git tag -d bad
git の履歴が不変であるという性質は既存のコミットを実際に "変更" していない ことを意味していることに注意してください;代わりに、古いコミットを 新しいオブジェクト名を持つ新しいコミットで置き換えています。