说明:解决网页能访问 GitHub 但 Git CLI 推送失败的问题
核心现象
-
浏览器正常:可以流畅访问
github.com网页。 -
命令行异常:执行
git push、git pull或git clone时出现Connection refused、Timeout或Recv failure错误。
深度原因分析
代理继承差异 (核心原因)
-
浏览器:通常会自动检测 Windows 系统的「代理服务器」设置(如 Clash、V2Ray 等提供的系统代理模式),并自动走 127.0.0.1 的代理端口。
-
Git CLI:作为命令行工具,它默认不继承系统的 GUI 代理设置。它需要通过
.gitconfig文件或环境变量手动指定代理端口。
协议与流量特征
-
HTTPS 干扰:GitHub 的 HTTPS 流量在推送大代码块时,特征非常明显,容易受到 ISP(运营商)或防火墙的深度包检测 (DPI) 干扰,导致连接在传输中途被重置。
-
DNS 污染:命令行工具使用的 DNS 解析可能与浏览器缓存的解析结果不同,导致解析到了失效的 GitHub IP。
终端环境差异
-
在 Trae、VS Code 或 PowerShell 等不同终端中,如果没有在配置文件中显式导出
HTTP_PROXY环境变量,Git 就会尝试直连。
解决方案汇总
方案 A:配置 Git 全局代理(最推荐,已执行)
通过显式告知 Git 代理工具的本地端口(通常为 7890 或 1080),让 Git 流量也走代理。
# 设置全局代理 (假设代理端口为 7890)
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890方案 B:针对 GitHub 单独配置(进阶版)
如果你不希望国内仓库(如 Gitee)也走代理,可以只针对 GitHub 生效:
git config --global http.https://github.com.proxy http://127.0.0.1:7890
git config --global https.https://github.com.proxy http://127.0.0.1:7890方案 C:使用 SSH 协议(稳定性最高)
SSH 协议通常比 HTTPS 协议在推送大数据时更稳定。
-
生成并添加 SSH Key 到 GitHub 账户。
-
切换远程仓库地址:
git remote set-url origin git@github.com:MorningStar0709/ppt-master-enhanced.git
方案 D:临时环境变量注入
在不修改全局配置的情况下,只对当前会话生效:
$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"
git push验证与排查工具
-
检查当前配置:
git config --global --get http.proxy -
测试 GitHub 连接:
ssh -T git@github.com(仅限 SSH 模式) -
查看解析 IP:
nslookup github.com
结论:在 Windows 办公环境下,Git 推送失败通常是由于 CLI 工具没有自动同步 GUI 代理软件的设置所致。通过 git config --global 显式指定代理是目前最快且最稳定的解决方案。