`git push` がlogが出ずにで止まる/リモート名抜けで失敗したときの原因と解決
【事例】git push がlogが出力せず無言で止まる/リモート名抜けで失敗したときの原因と解決(認証→SSH移行まで)
背景
個人学習用のMacで GitHub に git push したところ、端末が無言のまま数分待たされる、さらにその後にリモート名を誤って指定して失敗する、という現象に遭遇。
本記事では、初心者でも再現・対処できるように、切り分け手順から恒久対策までをまとめます。
本記事ではユーザー名/メール/鍵の指紋などのセンシティブ情報は
@<USERNAME>、<EMAIL@EXAMPLE.COM>、<FINGERPRINT>、******のように伏せ字にしています。
症状
-
git push origin <branch>実行後、何も出力されずに待機。 -
その後の操作で、こんなエラーが発生:
fatal: 'feature/creation_train_game' does not appear to be a git repository fatal: Could not read from remote repository.
原因(結論)
-
HTTPS 認証待ちが原因で無言に見えていた
- GitHub は通常パスワード不可、Personal Access Token(PAT) が必要。
- VS Code の Askpass ダイアログが裏で待機して、ターミナル側が無言に見える典型パターン。
-
push 引数の順序ミス/リモート名指定漏れ
-
git push <remote> <branch>の<remote>(例:origin)を抜く・順序を逆にすると、Git がブランチ名をリモート名と勘違いして失敗。
-
まずの切り分け(最短ルート)
# 詳細ログ付き push(HTTPSなら通信・認証が見える化)
GIT_TRACE=1 GIT_CURL_VERBOSE=1 git push -v origin <branch>
# 接続だけ試す(pushより軽い)→ ここで固まるなら通信/認証層が原因
git ls-remote origin -h
# リモートの方式(HTTPS or SSH)を確認
git remote -v
-
HTTP/2 401,www-authenticate: Basic realm="GitHub"が出たら認証で止まっているサイン。 - すぐ解決したいなら SSH移行が手堅い(下記)。
実際のログ(伏せ字版)
Pushing to https://github.com/<USERNAME>/<REPO>.git
<= Recv header: HTTP/2 401
<= Recv header: www-authenticate: Basic realm="GitHub"
run_command: 'git credential-osxkeychain get'
.../VS Code.app/.../askpass.sh 'Username for '\''https://github.com'\'': '
→ 401(未認証) で、GUIのaskpassがユーザー名の入力待ち。PAT をパスワード欄に入れる必要がある。
対処①:HTTPS のまま即時復旧(PAT を通す)
-
古いキャッシュを捨てる
git credential reject <<<'url=https://github.com' -
GUI askpass を無効化して、ターミナルで聞かせる
unset GIT_ASKPASS unset SSH_ASKPASS git config --global --unset core.askPass 2>/dev/null || true -
再度 push(プロンプトが出たらユーザー名とPATを入力)
GIT_TRACE=1 GIT_CURL_VERBOSE=1 git push -v origin <branch>
注意:パスワードではなく PAT をパスワード欄に入れる。
PAT は GitHub の Settings → Developer settings → Personal access tokens で作成(権限は必要最小限)。
対処②:恒久策として SSH に移行(推奨)
-
鍵生成(パスフレーズは推奨)
ssh-keygen -t ed25519 -a 100 -C "<EMAIL@EXAMPLE.COM>" -f ~/.ssh/id_ed25519 -
エージェントへ読み込み(macOSのKeychainに覚えさせる)
eval "$(ssh-agent -s)" ssh-add --apple-use-keychain ~/.ssh/id_ed25519 ssh-add -l # 指紋が出ればOK(<FINGERPRINT>) -
公開鍵を GitHub に登録(Settings → SSH and GPG keys)
pbcopy < ~/.ssh/id_ed25519.pub -
接続テスト
ssh -T git@github.com # Hi <USERNAME>! You've successfully authenticated, but GitHub does not provide shell access. -
リモートURLを SSH に変更
git remote set-url origin git@github.com:<USERNAME>/<REPO>.git git remote -v # git@github.com:... になっていればOK
つまずき②:fatal: '<branch>' does not appear to be a git repository
原因:git push の引数順ミス/origin の抜け。
正しい形:
git push -u origin <branch> # 最初の一回は -u を付けて upstream を設定
# 次回以降は
git push
より安全な型(ブランチ名の打ち間違いを回避):
git push -u origin HEAD
再発防止の設定(超おすすめ)
# 新規ブランチを初めて push するとき、自動で upstream を設定(Git 2.37+)
git config --global push.autoSetupRemote true
これで初回 git push でも -u 相当になり、以後は git push だけでOK。
(古い Git では効かない場合あり)
確認すべきファイル/設定と意図
-
.git/config-
[remote "origin"] url = git@github.com:<USERNAME>/<REPO>.git(SSHに統一)
-
-
~/.ssh/id_ed25519/~/.ssh/id_ed25519.pub-
秘密鍵(権限
600)と公開鍵(644)。公開鍵を GitHub に登録。
-
秘密鍵(権限
-
~/.ssh/config(複数鍵運用や安定化に)Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519 AddKeysToAgent yes UseKeychain yes -
追跡ブランチの確認
git rev-parse --abbrev-ref --symbolic-full-name @{u} # 未設定なら set-upstream する
運用時のコスト/注意点
- HTTPS+PAT:GUI 依存で“無言ハング”に見えがち。Keychain 登録で軽減可。
- SSH(ed25519):一度設定すれば快適・安全。パスフレーズ+ssh-agentで利便性と安全性を両立。
-
リモート名の統一(origin):ヒューマンエラー減。フォーク運用時は
origin(自分)とupstream(元)を役割分担。 - 巨大ファイルは LFS:push/clone の待ち時間が爆増するのを防ぐ(今回は未該当だが定石)。
- サブモジュール:サブモジュール側を先に push → 親リポの参照更新、の順序を厳守。
参考リンク(公式)
- Git
push(公式)
https://git-scm.com/docs/git-push - Git Remote(公式)
https://git-scm.com/docs/git-remote - Git Credential(資格情報)
https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage - GitHub:SSH 接続の設定
https://docs.github.com/authentication/connecting-to-github-with-ssh - OpenSSH
ssh-keygen
https://man.openbsd.org/ssh-keygen
まとめ
- 無言停止はだいたい認証待ち。PAT か SSH を正しく通せば解消。
-
git push <remote> <branch>の<remote>を忘れない。初回に-uを付けるか、push.autoSetupRemote=trueで再発防止。 - 学習用PCでもSSH(ed25519)+ パスフレーズ + ssh-agentが鉄板です。
必要であれば、あなたの実際のログから機微情報を自動マスキングして Zenn 用に整形するスクリプト例も用意できます(シェル or Node)。
Discussion