git推送超时或报错多因dns污染导致域名解析失败,可通过更换dns为1.1.1.1/8.8.8.8、刷新系统及浏览器dns缓存、改用ssh协议等方式快速解决。
git 推送超时或报错(如 fatal: unable to access 'https://github.com/...': failed to connect to github.com port 443),在 macos 上常不是网络断了,而是 dns 污染干扰了域名解析路径——系统查不到真实 ip,或解析到错误/不可达地址,导致 tls 握手卡住、连接失败。
确认是否为 DNS 污染问题
先快速验证:打开终端,执行以下命令:
-
ping -c 3 github.com—— 若显示“unknown host”,基本确定是 DNS 解析失败; -
nslookup github.com 1.1.1.1—— 用 Cloudflare DNS 查询,对比nslookup github.com(默认 DNS)结果是否一致; -
curl -I https://github.com—— 若返回 HTTP 状态码(如 200 或 302),说明网络通、TLS 可建立,问题大概率出在 Git 客户端自身或代理配置;若超时或报Could not resolve host,就是 DNS 层级故障。
立即生效的 DNS 修复操作
不依赖 hosts 修改,见效快且稳定:
- 进入 系统设置 → 网络 → 当前连接 → 详细信息 → DNS;
- 点击“+”号添加两行:1.1.1.1 和 8.8.8.8,拖拽至列表最上方;
- 删除原有 DNS 条目(尤其是运营商默认 DNS);
- 保存后,立即执行刷新命令:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
同步清理 Git 与浏览器的独立 DNS 缓存
macOS 系统缓存 ≠ Git 内部缓存 ≠ 浏览器缓存。仅刷系统 DNS 不够:
-
Git 自身不缓存 DNS,但它依赖系统调用;但如果你用了
git config --global http.sslBackend "secure-transport"(macOS 默认),SSL 层可能复用旧会话,建议临时禁用长连接:git config --global http.postBuffer 524288000git config --global http.version HTTP/1.1 -
Safari / Chrome 浏览器 DNS 缓存需单独清:Safari 启用「开发」菜单后点「开发 → 清除缓存」;Chrome 访问
chrome://net-internals/#dns点「Clear host cache」。
备用方案:切换为 SSH 协议推送
HTTPS 走的是域名 + TLS,易受 DNS 和 SNI 干扰;SSH 走的是固定主机名 git@github.com,底层使用 TCP 连接,抗干扰更强:
- 确认已生成并添加 SSH Key 到 GitHub Settings → SSH and GPG keys;
- 将远程地址改为 SSH 格式:
git remote set-url origin git@github.com:username/repo.git - 测试连接:
ssh -T git@github.com—— 正常应返回 “Hi username! You've successfully authenticated.”
这些步骤覆盖了从诊断到根治的完整链路,重点在于切断污染 DNS 的影响路径,而非临时绕行。实际中,90% 的 Git 推送超时只需完成 DNS 更换 + 缓存刷新即可恢复。











