1つのコミットを再編集する

履歴を再編集して間違いを訂正する で見てきたように直前のコミットを 以下のようにして修正することができます。

$ 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 の履歴が不変であるという性質は既存のコミットを実際に "変更" していない ことを意味していることに注意してください;代わりに、古いコミットを 新しいオブジェクト名を持つ新しいコミットで置き換えています。