Git
GitHub

GitHubのユーザー名を変更するとnoreplyメールアドレスのコミット履歴はどうなるのか?

はじめに

魔が差して、GitHubのユーザー名を変えたんですよ。
そしたら、過去のコミット履歴が全部自分のアカウントと切り離されちゃったので、
慌てて元に戻したんですよ。
そこから始まる新しいStory, Just for you

どうしてこうなった?

僕は一番最初にGitHubにpushした時から、user.emailとして「noreplyメールアドレス」を使ってて、
リアルなメールアドレスでは一度もpushしてません。
AuthorのメールアドレスをGitHub用のアドレスに変更する

GitHubユーザー名はTheRedなので、noreplyアドレスはTheRed@users.noreply.github.comになります。
ユーザー名を変更すると、元のTheRedアカウントは解放されて誰のものでもなくなるので、
TheRed@users.noreply.github.comのコミット履歴も誰でもなくなっちゃうんですね。。
当然といえば当然。

そこは許容するとしても、次に誰かがTheRedアカウントを取得してしまったら、
僕の過去のコミット履歴が全部他人の顔に変わってしまうんじゃないか??
というのを一番危惧してしまい、一旦元に戻しました。

おそらく、noreplyではなく本物のメールアドレスをuser.emailにしてる人が多いはず。
その場合はGitHubのユーザー名を変えてもメアドに影響ないので、この問題は発生しないのでしょう。
検索しても日本語では情報見つかりませんでした。

なんか興味あったので色々と試してみると、面白いことが分かってきたので、
以下にGitHubの挙動と未来への希望をまとめておきます。

noreplyメールアドレスの仕様変更

実は上に貼った記事は2014年の古い情報で、今はこんな仕様に変わってます。

GitHubでnoreplyとして認識されるメールアドレスは、
・2017/06/18より後にアカウントを作成した場合は "7桁のID+ユーザー名"
・2017/06/18より前にアカウントを作成した場合は "ユーザー名"
これに @users.noreply.github.com を付けたものになります。

GitHubのメールアドレスが漏れる?コミット時のメールアドレスにnoreplyを設定

去年の6月に変わったんですね。
僕が初回登録したのはもっと前なので"ユーザー名@"になってたんですが、
今回一度ユーザー名を変えて戻したタイミングで、メアド変わってました!
今は 4494300+TheRed@users.noreply.github.com となっております!

GitHubの挙動を実験

テスト用のGitHubアカウントをもう一つ持っていたので、
そっちのアカウントを変更しつつ、コミット時のメアドも変更しつつ
いくつか試してみました。

アカウント名はhosoiri-villagerで、去年登録したので
noreplyアドレスは既にこの形式でした。
32363877+hosoiri-villager@users.noreply.github.com

このアカウント名をioridaniに変更してみたところ、
noreplyアドレスの番号部分は変わらず!
「ユーザーID」みたいな扱いなんでしょうね。
32363877+ioridani@users.noreply.github.com

ローカルでgit commitするときに、user.emailを切り替えながら
数パターンやってみた結果がこちら。

メールアドレス GitHubで認識されるユーザー
4494300+TheRed@ TheRed
TheRed@ TheRed
32363877+ioridani@ ioridani
32363877+hosoiri-villager@ ioridani(自動変更)
hosoiri-villager@ (見つからず)

なるほど、"7桁のID+ユーザー名"のメアドでコミットされていれば、
ユーザー名を変更する前のコミットも自動的に紐づいてくれるんですね!
ID次第ってことなのですな。

実際のGitHub履歴とローカルgit logのキャプチャも晒しておきまーす。
https://github.com/TheRed/change-username-test/commits/master
スクリーンショット 2018-07-08 0.49.06.png

スクリーンショット 2018-07-08 0.49.18.png

ユーザー名を変更できそうな新たなる希望

今はTheRedユーザが存在するからどっちでコミットしてもOKだけど、
この状態でユーザー名を変えると4494300+TheRed@だけは生き残るはず。
ってことは、

  • 今日以降4494300+TheRed@user.emailにした状態でガシガシコミットしていく
  • メジャーなリポジトリの履歴からTheRed@が埋もれた頃にユーザー名変更
  • 過去分のコミットは潔く諦める
  • 新しくTheRedユーザーが登録されてもxxxxxxx+TheRed@でコミットしてくれれば自分には影響なし

で混乱なく移行できそうな感じです!
まだMergeされてないプルリクとかあるので、
現時点ではそっとメアドだけ変更して寝かせておくことにしまーす:smile: