GitHubのHTTPS接続で「fatal: Authentication failed」を修正する — Windows資格情報マネージャーの古い認証情報キャッシュが原因

beginner🪟 Windows2026-06-20| Windows 10 / Windows 11、Git for Windows 2.x、GitHub HTTPSリモート

Error Message

fatal: Authentication failed for 'https://github.com/username/repo.git/'
#git#github#credential-manager#認証#windows

エラーの内容

fatal: Authentication failed for 'https://github.com/username/repo.git/'

これは突然やってくるエラーです。何ヶ月も同じリポジトリにプッシュし続け、ずっと問題なく動いていたのに、ある朝突然すべての git pushgit pull がこのエラーで失敗するようになる。コードの変更もなし。設定の変更もなし。何も心当たりがない。

Windows の場合、原因はほぼ確実に Windows 資格情報マネージャーが古くなった GitHub トークン、またはGitHub が受け付けなくなったパスワードをキャッシュしていることです。そのキャッシュエントリを削除すれば、2分以内に元通りになります。

なぜこのエラーが発生するのか

Windows 資格情報マネージャーは、初回認証時に GitHub の認証情報を保存します。これにより、プッシュのたびに入力する手間が省けます。しかし、保存された認証情報が古くなると問題が起きます。よくあるトリガーは以下の通りです:

  • GitHub 上で個人アクセストークン(PAT)をローテーションまたは削除した
  • GitHub アカウントのパスワードを変更した
  • パスワード認証から PAT に移行した(GitHub は 2021 年 8 月にパスワードベースの HTTPS 認証を廃止)
  • 同じマシンで複数の GitHub アカウントを切り替えた

これらのいずれかが発生すると、Git は古い認証情報を黙って送り続けます。GitHub はその都度拒否します。それが fatal: Authentication failed の原因です。

修正手順

方法 1: Windows 資格情報マネージャーの UI から削除する(最も簡単)

  • スタート を開いて 資格情報マネージャー を検索し、起動します。
  • Windows 資格情報 タブをクリックします。
  • git:https://github.com または GitHub で始まるエントリを探します。
  • エントリをクリック → 削除 をクリック → 確認します。
  • 再度 git push を実行すると、Windows が新しい認証情報の入力を求めます。

方法 2: コマンドラインから削除する(より素早い)

PowerShell またはコマンドプロンプトを開き、以下を実行します:

cmdkey /delete:LegacyGeneric:target=git:https://github.com

正確なターゲット名がわからない場合は、GitHub 関連のエントリを先に一覧表示します:

cmdkey /list | findstr /i github

出力からターゲット名をコピーし、削除します:

cmdkey /delete:LegacyGeneric:target=git:https://github.com

方法 3: Git の資格情報ヘルパーを直接使う

Git Credential Manager には独自の削除コマンドがあります。ターミナルで以下を実行します:

git credential-manager erase

次に、以下を正確にそのまま入力し、Enter を 2 回押して EOF を送信します:

protocol=https
host=github.com

GCM が利用できない古い Git バージョン(2.29 未満)では、代わりに下位レベルのコマンドを使います:

git credential reject
protocol=https
host=github.com
username=your-github-username

PAT で再認証する

古い認証情報を削除した後、次の git push でユーザー名とパスワードの入力を求められます。ここで注意が必要です — GitHub アカウントのパスワードは入力しないでください。GitHub は 2021 年 8 月に HTTPS のパスワード認証を廃止しました。代わりに個人アクセストークンが必要です:

  • GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic) に移動します。
  • Generate new token (classic) をクリックします。
  • 名前を付け、有効期限を設定し(90 日が妥当なデフォルト)、repo スコープにチェックを入れます。GitHub Actions の設定をプッシュする場合は workflow も追加します。
  • トークンをすぐにコピーします — GitHub は一度しか表示しません。
  • Git がパスワードを求めたら、そこにトークンを貼り付けます(ユーザー名フィールドではありません)。

Windows 資格情報マネージャーが新しいトークンを自動的に保存します。次回以降のプッシュはプロンプトなしで通るようになります。

方法 4: SSH に切り替える(恒久的な解決策)

トークンの有効期限に悩まされたくない場合、SSH にはこの問題がありません。コマンド一つでリモートを切り替えられます:

git remote set-url origin git@github.com:username/repo.git

事前に SSH キーを GitHub アカウントに登録する必要があります。それ以降は、認証が自動的に行われ、トークン不要で無期限に使えます。

修正の確認

小さなものをプッシュして確認します:

git push origin main

または、何もプッシュせずにテストします:

git ls-remote origin

エラーなしで refs(HEAD、ブランチ、タグ)が一覧表示されれば、解決しています。資格情報マネージャーに今何が保存されているか確認したい場合は:

cmdkey /list | findstr /i github

新しいエントリが表示されるはずです。古い古くなったエントリは消えています。

補足

PAT の有効期限が最も多い再発原因です。 トークン作成時、GitHub では 7 日、30 日、60 日、90 日、または無期限を選べます。有効期限なしのトークンは便利ですが、セキュリティ上のリスクがあります。私は 90 日に設定し、有効期限の 10 日前にカレンダーリマインダーを追加しています。そうしないと、プッシュの途中、デモの最中、最悪のタイミングでこのエラーに遭遇することになります。

PAT はパスワードと同様に厳重に管理してください。 repo スコープを持つトークンは、すべてのプライベートリポジトリへの完全な読み書きアクセス権を持ちます。Slack に貼り付けたり、スクリプトにハードコードしたり、どこかにコミットしたりしないでください。API キーやテスト用シークレットなど、他の用途で強力なランダムトークンを生成する必要がある場合は、ToolCraft のパスワードジェネレーターを使っています。ブラウザ上で完全に動作し、サーバーへのアップロードは一切ありません。

1 台のマシンで複数の GitHub アカウントを使うのは別の悩みどころです。資格情報マネージャーはホストごとに 1 エントリしか保持できないため、アカウントが互いに干渉します。~/.ssh/config で異なるホストエイリアスを使った SSH がこれをうまく解決します — 各プロジェクトが異なるエイリアスを参照し、各エイリアスが異なるキーにマッピングされるため、認証情報の衝突が起きません。

認証情報を削除した後も問題が繰り返し発生する場合は、資格情報ヘルパーの設定を確認してください:

git config --global credential.helper

最新の Git for Windows では manager と表示されるはずです。wincredstore、または何も表示されない場合、それが不安定なキャッシュ動作の原因である可能性が高いため、次の有効期限切れが来る前に修正しておく価値があります。

Related Error Notes