環境をいくつも使っていると設定を間違ってコミットしてしまうことがありますよね。
特に1台のPCに仕事とプライベートのリポジトリが混在してるとメール設定が間違っていたり・・・
こういうのは大抵だいぶ後に見つけてしまうのですが、Gitは過去のコミットログを修正できます。
まあ push -f するのは危険なので最初から気をつけるに越したことはないですけどね。
ここを参考にやってみました。
確認方法
1個目は正常。2個目間違ってる。。。
$ git log --pretty=fuller commit xxxxxxxxxxd61e214a190a042f3416c5d85f4046 (HEAD -> master, origin/master, origin/HEAD) Author: GOZU Kenichiro <gozuk16@gmail.com> AuthorDate: Sat Oct 31 13:13:20 2020 +0900 Commit: GOZU Kenichiro <gozuk16@gmail.com> CommitDate: Sat Oct 31 13:13:20 2020 +0900 commit xxxxxxxxxxd66b9169746acada7f8355e59d6d1c Author: GOZU Kenichiro <k.gozu@example.com> AuthorDate: Fri Oct 30 13:13:21 2020 +0900 Commit: GOZU Kenichiro <k.gozu@example.com> CommitDate: Fri Oct 30 13:13:21 2020 +0900
emailを書き換え
指定するメールアドレスは変更後のものです。
履歴全部を書き換える場合、最後に HEAD
を指定します。
ユーザ名も GIT_AUTHOR_NAME
と GIT_COMMITTER_NAME
で書き換えできますが、今回はメールアドレスだけ間違ってました。
$ git filter-branch -f --env-filter "GIT_AUTHOR_EMAIL='gozuk16@gmail.com'; GIT_COMMITTER_EMAIL='gozuk16@gmail.com';" HEAD Proceeding with filter-branch... Rewrite xxxxxxxxxxd61e214a190a042f3416c5d85f4046 (20/20) (0 seconds passed, remaining 0 predicted) Ref 'refs/heads/master' was rewritten
書き換えを確認
$ git log --pretty=fuller commit xxxxxxxxxxd1218c7b6d2a96c57e0ca6f8776547 (HEAD -> master) Author: GOZU Kenichiro <gozuk16@gmail.com> AuthorDate: Sat Oct 31 13:13:20 2020 +0900 Commit: GOZU Kenichiro <gozuk16@gmail.com> CommitDate: Sat Oct 31 13:13:20 2020 +0900 commit xxxxxxxxxx72d5d3b83a8df9c645508e3531787d Author: GOZU Kenichiro <gozuk16@gmail.com> AuthorDate: Fri Oct 30 13:13:21 2020 +0900 Commit: GOZU Kenichiro <gozuk16@gmail.com> CommitDate: Fri Oct 30 13:13:21 2020 +0900
リモートリポジトリへpush
過去を改変した場合、 -f
じゃないとpush出来ないのでチームで使ってるリポジトリはメンバーに確認してやりましょう。
$ git push -f Enumerating objects: 83, done. Counting objects: 100% (83/83), done. Delta compression using up to 12 threads Compressing objects: 100% (82/82), done. Writing objects: 100% (83/83), 25.66 KiB | 3.67 MiB/s, done. Total 83 (delta 46), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (46/46), done. To https://github.com/gozuk16/testrepo + xxxx200...xxxxd73 master -> master (forced update)