GitHubの草が生えない(Contribution activity)
問題
ローカルでコミットをしてGitHubにpushしているのに、Contribution activityに反映されず「草が生えない」状態になっていた。
結論
コミットのメールアドレスが GitHub アカウントに登録されていないことが問題。
背景
- macbookを2台所有し、場所や状況によって使い分けていた
- それぞれの端末で異なるメールアドレスをGitの
user.emailに設定していた - 片方(macbook1)はGitHubに登録済みメールアドレス→Contribution activityに反映
- もう片方(macbook2)は未登録のメールアドレス→Contribution activityに反映されなかった
解決のためにやったこと
1. GitHub のnoreplyメールアドレスの使用
username@users.noreply.github.comを使うとプライバシーを守りつつ、Contributionに反映できる
noreplyメールアドレスの確認方法
-
GitHub にログインし、右上のアイコン → Settings を開く
-
左メニューから Emails を選択

-
"Keep my email address private" にチェックを入れる

-
「Primary email address」の下に、GitHub が発行した noreply メールが表示される

2. コミット時のメールアドレスの確認
$ git log --pretty=format:"%h %ae"
6e54d59 username@users.noreply.github.com
161d8ad username@users.noreply.github.com
e1ebde1 username@users.noreply.github.com
3b983cc username@users.noreply.github.com
2c916c2 username@gmail.com
2e3f971 username@gmail.com
4a7448a username@gmail.com
-
git log:コミットログを表示するコマンド -
--pretty=format:"...":ログの表示形式をカスタマイズ -
%h:コミットハッシュ(短縮版)※
例:6e54d59 -
%ae:→ Author Email(コミット時のメールアドレス)
3. コミット時のメールアドレスの確認・設定
コミット時のメールアドレス設定を確認する
現在のリポジトリ(ローカル設定)
git config user.email
グローバル設定(全リポジトリ共通)
git config --global user.email
定義している設定ファイルの確認
git config --show-origin user.email
コミット時のメールアドレスを再設定する
1. グローバル設定(PC全体で共通)を変更
git config --global user.email "123456789+username@users.noreply.github.com"
git config --global user.name "username" //ついでにユーザーネームの変更方法
- すべてのリポジトリでこのメールアドレスが使われる
-
usernameと数字部分は 「GitHubのSettings > Emails」 で表示されたnoreplyアドレスに置き換える。
2. 特定のリポジトリだけ変更したい場合
git config user.email "199331470+username@users.noreply.github.com"
git config user.name "username"
3. 設定が正しく反映されたか確認
git config user.email
git config user.name
この時点でコミットすれば無事に草が生えました🌱
以下は過去のコミットもContribution activityに反映させたい場合の対処法を記載。
4. 過去のコミットのメールアドレスの変更
すでにpush済みの過去のコミットもnoreplyアドレスに統一したい場合は、rebaseを使って過去のコミットを1件ずつ編集する。
(git filter-repo で一括置換も可能だが、今回は手動で対応した)
1. コミットログを確認
$ git log --pretty=format:"%h %ae"
a1b2c3d username@users.noreply.github.com
d4e5f6g username@users.noreply.github.com
2. 基点のコミットを指定してエディタを開く
編集したい最初のコミットの 1つ前 を指定:
$ git rebase -i "a1b2c3d^"
pick a1b2c3d ログイン画面のUIを改善
pick d4e5f6g 認証処理のバグ修正
pick h7i8j9k READMEに環境構築手順を追記
pick l0m1n2o CI設定ファイルを更新
-
"a1b2c3d^"<基点コミット>:編集したい範囲の1つ前のコミットを指定する。
例:git rebase -i a1b2c3d^(a1b2c3dの1つ前からHEADまでが対象)。
3. 変更したいコミットのpickをeditに変更する。
edit a1b2c3d ログイン画面のUIを改善
edit d4e5f6g 認証処理のバグ修正
pick h7i8j9k READMEに環境構築手順を追記
pick l0m1n2o CI設定ファイルを更新
保存(^X)する。
4. author を修正して rebase を進める
コミットごとに止まるので、以下のコマンドを入力する
git commit --amend --author="Your Name <your-email@example.com>"
このコマンドを実行すると、コミットメッセージを編集するためのエディタが開く。
メールアドレスだけ変えたい場合は、内容は変更せず保存・終了(^X)する。
そのあとで以下のコマンドを入力する。
git rebase --continue
これをコミットごとに繰り返す。
5. すべて終わったら、強制push
git push --force
補足: 主なrebaseコマンド
| コマンド | 意味 |
|---|---|
| pick | そのまま適用 |
| edit | コミット内容や author を修正 |
| reword | コミットメッセージだけ変更 |
| squash | 直前のコミットにまとめる |
| drop | コミットを削除 |
5. rebaseの基礎理解
rebaseとは
-
git rebaseは 過去のコミットを付け替え・編集するためのコマンド - とくに
-i(インタラクティブモード)を使うと、履歴を1件ずつ修正・並び替え・統合できる
よく使うケース
- author やコミットメッセージの修正(
edit/reword) - 不要なコミットの削除(
drop) - 複数のコミットをまとめる(
squash)
注意点
-
rebaseは 履歴を書き換える操作なので、rebase後にpush済みのブランチへpushする場合は--forceが必要 - チーム開発での
pushは--forceではなく--force-with-leaseを推奨(他人の変更を誤って消さない)
学び
- 複数端末で作業する場合は
user.emailを統一しておくことが大事 - Contribution activity に反映される条件(デフォルトブランチ、GitHub登録済みメール)を学べた
- noreplyメールは便利(プライバシー保護 & Contribution反映)
- rebaseはコミット履歴を書き換える強力なツールである
Discussion