自宅から会社のリポジトリにpushしたら、なんでかauthorが個人用のアカウント名になってて顔面蒼白なんだけど……
— 黒鍵 (@blac_k_ey) 2016年8月27日
ぐわーっ、また会社のリポジトリに個人アカウントのauthorでpushしとる…
— 黒鍵 (@blac_k_ey) 2016年9月26日
gitのuser.name/user.emailの設定を誤ってpushしてしまうと、GitHub上で空のアイコンになったり、アカウントが紐づけされて、別の用途に使っているアカウントがバレてしまう。
その対処法と再発防止策。
やらかしたコミットを修正する
「commit 002」を修正したい。
$ git rebase -i 【間違えたコミットのひとつ前のコミット】
ここでは acedb...を指定
修正したいコミットの「pick」を「edit」に修正して保存。
こんな感じのメッセージがでてくる。
コミットを修正できる状態になったので、authorを上書きしてコミットする。
$ git commit --amend --author="example <example@example.com>"
rebase から復帰する
$ git rebase --continue
無事修正された。
あとはpushすればおk
$ git push -f
forceする覚悟をキメるんだ
再発防止策をとる
@blac_k_ey それ防止するために、commitのhookにgit config --local user.{name,email}の設定を要請するやつ入れてるw
— あいや (@public_ai000ya) 2016年9月11日
gitにhookの概念があることを知らなかった(´ω`;)
というわけでパクらせてもらおう
参考: https://github.com/aiya000/dotfiles/blob/master/.git_templates/hooks/pre-commit
.git/hook/pre-commit
#!/bin/sh
if [ -z "`git config --local user.name`" ] ; then
echo '名無し(´・ω・`)'
exit 1
fi
if [ -z "`git config --local user.email`" ] ; then
echo 'メールアドレスがない(T_T)'
exit 1
fi
※ 原因が分かりやすいメッセージで置き換えましょう
実行権限の付与も忘れずに。
$ chmod u+x .git/hook/pre-commit
上手くいった。
とはいえ、いちいちpre-commitのスクリプトを配置するのも面倒。
git initの際に配置されるようにする。
テンプレート用のディレクトリを作成してスクリプトを配置
$ mkdir -p ~/.git_template/hook
$ touch ~/.git_template/hook/pre-commit
(上記のスクリプトを仕込む)
$ chmod u+x ~/.git_template/hook/pre-commit
gitにテンプレートとして認識させる
$ git config --global init.templatedir
おk
これでヒヤヒヤすることも無くなるだろう。たぶん。