ちょっとした修正しようと思ったけど、手元にいつものPCがなかったので少し古いPCで作業したときにやってしまったメモ。
古いPCのgit設定が会社用のgitと紐付いてて、それに気づかずpushしてしまいました。
github確認したら別アカウントのユーザがあってびっくり。
ちょうどいい記事を見つけたので割とすんなり解決できました。
というわけで、別ユーザでgithubにpushしたコミットログを書き換える方法です。
一括変換
一括変更は下記のコマンドでできます。
$ git filter-branch -f --env-filter \
"GIT_AUTHOR_NAME='<変更後の名前>'; \
GIT_AUTHOR_EMAIL='<変更後のメールアドレス>'; \
GIT_COMMITTER_NAME='<変更後の名前>'; \
GIT_COMMITTER_EMAIL='<変更後のメールアドレス>';" \
<対象コミット>
<対象コミット>は全部もしくは範囲指定できます。
- HEAD → 全部
- HEAD~3..HEAD → 過去直近3コミット分
Author名指定
また、特定のAuthor名だけを指定して変更もできます。私はこちらを使いました。
$ git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "<変更前の名前>" ]; then
GIT_AUTHOR_NAME="<変更後の名前>";
GIT_AUTHOR_EMAIL="<変更後のメールアドレス>";
GIT_COMMITTER_NAME="<変更後の名前>";
GIT_COMMITTER_EMAIL="<変更後のメールアドレス>";
git commit-tree "$@";
else
git commit-tree "$@";
fi' <対象コミット>
詳しく調べてないのでよくわかってないまま使ってる場所がありますが、これでできます。
(git commit-tree "$@"
ってなんだろう…)
あ、シングルクォートやダブルクォート、[ ]の前後に空白入れ忘れたりするとエラーになるので気をつけてください(なりました。)
リモートに反映
git log
で確認し、大丈夫そうならリモートに反映しましょう。
このあとはgit push -f xxxxx yyyyy
をしてあげるとリモート先でも書き換わります。
チーム開発ではやばい気がするので、やる時はその筋のプロに相談しましょう。