過去のコミットの内容を変更する
Gitで過去のコミット内容を変更したときのメモ
やりたいこと
Gemfileなどの設定ファイルの最終行を入れ忘れるのをよくやってしまう。
Githubにpushした後に気づいたので、既にこの状態でコミットを数回かけてしまっている。 修正したものを新たにコミットしてもいいんだけど、できるならGemfile追加したコミットで修正したい。
やったこと
git rebase -i
を使って修正した。
1.修正したいコミットの1つ前のコミットハッシュを取得
$ git log -n 10 --oneline --reverse 897dd2a (master) first commit 31a7030 gemfileにkaminari追加 30c612d ページング処理実装 319ec6e kaminari_config.rb作成 6bfb404 default_per_page設定 3556732 (HEAD -> pagination, origin/pagination) 並び順の指定
※過去10個分のコミットを1行ずつ表示している
2.上記の 31a7030のコミットを修正したい場合
$ git rebase -i 31a7030
vimで表示されるコミットのうち、対象のコミットだけpickupをeditにして保存&終了
3.当該コミットがワークブランチに展開される
この状態で修正する
修正が終わったらgit add
で変更をステージングする(忘れがち)
git commit --amend
を実施することで、元のコミットを修正できる
4.最後にgit rebase --continue
でコミットを修正される
同時に元の作業コミットに戻る
この場合通常のpushしてもエラーが出てしまうので、-fで強制プッシュを行う。
無事に修正できました
コミットは修正できましたが、同じ過ちを繰り返さぬようVSCode側の設定でtrimFinalNewlines
をtrueにして自動で改行を入れてくれるように設定しました。
参考
git-rebase - 過去のコミットを修正したい(コミット分割、内容訂正・追加) akikumo_tea - Ruffnote (ラフノート)
VS Codeで行末やファイル末尾の空白文字を削除するには:Visual Studio Code TIPS - @IT