
GitHubアカウントを2つ使っていると、git pushで地味にハマる話
GitHubのアカウントを2つ使っている。
たとえば、個人用と仕事用。
あるいは、自社用と別プロジェクト用。
一見すると便利なのだけれど、ローカル開発環境で git push しようとした瞬間に、ちょっとした混乱が起きる。
「このリポジトリには、このアカウントでpushしたい」
ただそれだけなのに、意外とめんどい。
remoteは合っているのにpushできない
今回の状況はこうだった。
git remote -v結果はこう。
origin https://github.com/kumakake/crm.git (fetch)
origin https://github.com/kumakake/crm.git (push)push先はちゃんと kumakake/crm になっている。
つまり、リモートリポジトリの設定は間違っていない。
でも、GitHub CLIの認証状態を確認するとこうだった。
gh auth statusgithub.com
✓ Logged in to github.com account damedame
- Active account: true
- Git operations protocol: httpsここで気づく。
リポジトリの向き先は kumakake。
でも、ローカルの認証は damedame。
つまり git push すると、damedame として kumakake/crm にpushしようとしてしまう。
remoteは合っている。
でも、認証している人が違う。
このズレが原因だった。
ブラウザのログインと、Gitの認証は別物
最初にややこしいのがここ。
GitHubをブラウザで開くと、複数アカウントが表示される。
「damedame」
「kumakake」
どちらでログインするか選べる。
ただし、これはあくまでブラウザ上の話。
ローカルの git push で使われる認証情報とは別である。
Gitの認証は、HTTPSならGitHub CLIやmacOSのキーチェーン、Credential Managerなどに保存されている情報が使われる。
なので、ブラウザで kumakake にログインしていても、ローカルでは damedame の認証情報を使っている、ということが普通に起きる。
ややこしい。
玄関は合っているのに、名札が違う人が入ろうとしている感じ。
一時的にはGitHub CLIで切り替えればよい
GitHub CLIを使っている場合は、次のようにログイン状態を確認できる。
gh auth statusもし damedame でログインしていて、kumakake に切り替えたいなら、いったんログアウトしてログインし直す。
gh auth logout --hostname github.com --user damedameそして kumakake でログインする。
gh auth login --hostname github.com --web --git-protocol httpsログインできたら、GitにもGitHub CLIの認証を使わせる。
gh auth setup-gitこれでpushできるようになる。
git pushただ、この方法には弱点がある。
複数アカウントを日常的に使う場合、いちいち切り替えるのが面倒なのだ。
今日の自分は damedame なのか。
それとも kumakake なのか。
人間にもGitにも負荷が高い。
長期的にはSSHキーをアカウントごとに分けるのが楽
複数GitHubアカウントを使うなら、HTTPSよりSSH運用のほうが楽だと思う。
アカウントごとにSSHキーを分ける。
たとえばこう。
~/.ssh/id_ed25519_damedame
~/.ssh/id_ed25519_kumakakeそして ~/.ssh/config に設定を書く。
Host github-damedame
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_damedame
IdentitiesOnly yes
Host github-kumakake
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_kumakake
IdentitiesOnly yesこのようにしておくと、リポジトリごとに使うアカウントを固定できる。
たとえば kumakake 側のリポジトリなら、remoteをこうする。
git remote set-url origin git@github-kumakake:kumakake/crm.gitこれで、このリポジトリでは常に kumakake 用のSSHキーが使われる。
確認はこう。
ssh -T git@github-kumakakeうまくいけば、こんな感じのメッセージが出る。
Hi kumakake! You've successfully authenticated...あとは普通にpushするだけ。
git push毎回ログインを切り替えなくていい。
リポジトリごとに「このGitHubアカウントでpushする」が決まる。
これはかなり平和。
git config user.name はpushアカウントではない
ちなみに、ここも勘違いしやすい。
git config user.name
git config user.emailこれはコミットの作者情報であって、GitHubへのログインアカウントではない。
つまり、これを kumakake に変えても、push時の認証が damedame のままなら、damedame としてpushしようとする。
user.name と user.email は「誰がコミットを書いたか」。
SSHキーやGitHub CLIの認証情報は「誰としてGitHubに接続するか」。
似ているけれど、役割が違う。
まとめ
GitHubアカウントを複数使っているときに git push でハマったら、見るべきポイントはこの3つ。
git remote -vリモート先が正しいか。
gh auth statusGitHub CLIでは誰としてログインしているか。
ssh -T git@github-kumakakeSSHではどのアカウントとして認証されているか。
一時的な対応なら、GitHub CLIでログインし直せばよい。
ただ、複数アカウントを継続して使うなら、アカウントごとにSSHキーを分けて、~/.ssh/config で管理するのが楽。
GitHub複数アカウント運用は、HTTPSのままだと「今、自分は誰としてpushしているのか問題」が起きやすい。
なので、認証の交通整理は人間が毎回がんばるより、SSH設定に任せる。
Gitに哲学をさせない。
設定ファイルに淡々と働いてもらう。
そのほうが、開発環境はだいぶ平和になる。
終わりに
普段は X で、Claude Code や VPS 運用、個人開発の試行錯誤について発信しています。よかったらフォローしてください 👇
X: @kumapress1
質問や「こんなハマり方したよ」みたいな話もお待ちしてます。