アプリケーション開発ポータルサイト
ServerNote.NET
Amazon.co.jpでPC関連商品タイムセール開催中!
カテゴリー【Git/GitHub
【Git】間違ったユーザー名/Emailでcommit/pushしてしまったものを過去に遡って全変更する
POSTED BY
2023-10-10

特に初期設定せず、何も考えずにレンタルサーバーなどでGitHubにcommit/pushすると、コミットしたユーザー名・Emailアドレスが意図せず流出してしまう危険性がある。git commit,pushで、GitHubのリモートリポジトリがpublicだった場合、誰がコミットしたのか見ればわかる。これを見られても問題ない名前にしっかり設定しておかないと、ローカルマシン内部で設定しているユーザー名・Emailがそのままここに表示されてしまう。

これは、ローカルマシンを使い始めの時にgit config --globalをし忘れたために起こるが、もうすでに意図しないユーザー名でcommit/pushしてしまったのが判明した場合、正しいものに過去を含めてすべて修正・pushし直さなければならない。その方法が以下。

1、まずgit configで公開しても良い正しいユーザー名/emailを設定する

ここで設定した値がGitHubでグローバルに公開されるわけだから、見られても良いものに設定する。

git config --global user.name mypublicname
git config --global user.email mypublicname@example1155.jp
cat ~/.gitconfig #確認

2、間違ったユーザー名でAuthor/Committerしてしまっているか確認する

.gitディレクトリが存在する対象リポジトリディレクトリに移動し、以下コマンドでログを確認する

cd my_public_repo

git log --pretty=full
commit 1674da875ec9f521453ca923aefff0dc7a57ede0
Author: myprivatename <myprivatename@example1155private.jp>
Commit: myprivatename <myprivatename@example1155private.jp>

    スペルミス修正

commit d36d695e005542391d09f897910c3297bb32cef7
Author: myprivatename <myprivatename@example1155private.jp>
Commit: myprivatename <myprivatename@example1155private.jp>

    copy initial files

myprivatename(例)という公開してはならないプライベートな名前とメールアドレスでコミットしてしまっていることを確認。pushしてしまっているなら、すでにGitHubでグローバルに公開されてしまっているので危険。これを全部修正する。

3、公開してもよい情報で過去も含めてコミット情報を上書きする

mypublicname, mypublicname@example1155.jpに一気に直す。

cd my_public_repo

git filter-branch -f --env-filter "GIT_AUTHOR_NAME='mypublicname'; GIT_AUTHOR_EMAIL='mypublicname@example1155.jp'; GIT_COMMITTER_NAME='mypublicname'; GIT_COMMITTER_EMAIL='mypublicname@example1155.jp';" HEAD

Rewrite 14371c71696b9330292beec785a02ba36c9209b0 (2/2)
Ref 'refs/heads/master' was rewritten

4、書き換わっているか再び確認し、GitHubに強制pushする

cd my_public_repo

git log --pretty=full
commit 1674da875ec9f521453ca923aefff0dc7a57ede0
Author: mypublicname <mypublicname@example1155.jp>
Commit: mypublicname <mypublicname@example1155.jp>

    スペルミス修正

commit d36d695e005542391d09f897910c3297bb32cef7
Author: mypublicname <mypublicname@example1155.jp>
Commit: mypublicname <mypublicname@example1155.jp>

    copy initial files

見られてもよい名前・メールに直っているのが確認できたので、リモートリポジトリ=GitHubに強制的にpushして反映する。

git push -f origin master

Counting objects: 202, done.
Delta compression using up to 56 threads.
Compressing objects: 100% (153/153), done.
Writing objects: 100% (202/202), 174.58 KiB | 0 bytes/s, done.
Total 202 (delta 47), reused 0 (delta 0)
remote: Resolving deltas: 100% (47/47), done.

To git@github.com:mypublicname/my_public_repo.git
 + 14371c7...1674da8 master -> master (forced update)

強制更新できたので、GitHubサイトで、committed 1 hour agoなどの情報があるリンクを見て、上記公開ユーザー名にちゃんと書き換わっているか確認する。(旧myprivatenameがもう表示されないか確認)

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】