GitHub 推送失败:我如何把网络错误拆成可排查的工程问题
我以前写这篇文章时,心态很简单:GitHub 拉不下来、推不上去,赶紧把能用的命令记下来。
后来做项目多了,我对这类问题的看法变了。网络错误最麻烦的地方,不是报错本身,而是它经常把代理、DNS、证书、Git 配置、远程仓库地址、公司网络策略混在一起。如果只复制一条命令,很容易这次好了,下次又坏。
我现在更愿意把它当成一个工程排查问题。
我先看错误属于哪一层
我遇到过两类典型报错。
一种是:
另一种是:
它们看起来都像 SSL 问题,但我不会第一步就去改证书配置。我的判断顺序通常是:
- 先确认 GitHub 能不能在浏览器里打开。
- 再确认当前终端是否走了正确代理。
- 再确认 Git 的全局代理配置有没有残留。
- 再看网络是否拦截了 HTTPS 连接。
- 最后才检查证书、Git 版本、OpenSSL 或 LibreSSL 相关问题。
这套顺序的价值在于,它把“玄学报错”拆成了可以验证的路径。
我会先查 Git 代理配置
很多时候,问题不是没有代理,而是 Git 还记着一条旧代理。
我会先看当前配置:
如果本机代理端口已经变化,Git 还在走旧端口,就会出现连接失败。
这时我会重新设置:
如果当前网络不再走代理,我会清掉:
我现在不会把这些命令当成“万能修复”。它们只是确认 Git 网络路径的一组开关。
我不会把关闭 SSL 校验当成默认解法
旧文里写过:
现在回看,这个建议太粗糙。
关闭 SSL 校验可能让某些环境临时绕过报错,但它也会让 Git 不再验证 HTTPS 证书。这不是我现在愿意长期保留的全局配置。
如果我只是为了验证是不是证书链问题,我会把它当作临时诊断动作,并且立刻恢复:
更稳的处理方式,是更新 Git、证书库、系统根证书,或者换成 SSH remote。
我的排查地图
我现在遇到 GitHub 连接问题,会按这个顺序走:
- 浏览器访问 GitHub,确认不是整体网络断开。
git remote -v看仓库地址是否正确。
- 检查 Git 的
http.proxy和https.proxy。
- 临时切换网络或代理端口,排除本地网络策略。
- 更新 Git 客户端和证书库。
- 必要时把 HTTPS remote 换成 SSH remote。
SSH 方案一般是:
这样可以把问题从 HTTPS 证书和代理链路,转移到 SSH key 与 22/443 端口可达性上。
我从这类问题里学到的事
工具报错最容易让人急着找“那条命令”。
但真正节省时间的,不是收藏更多命令,而是知道自己在检查哪一层。
GitHub 推送失败背后,经常不是 Git 坏了,而是网络路径不确定。只要我把代理、远程地址、证书和客户端版本拆开看,问题就会从焦躁变成流程。
这也是我现在整理技术旧文时最想保留的东西:命令可以更新,工具会变化,但排查顺序会长期有用。
Loading...





