解决 Git 推送/拉取报错:Could not resolve host: gitee.com
解决 Git 推送/拉取报错:Could not resolve host: gitee.com
问题现象
在使用 Gitee(码云)进行代码管理时,执行git push或git pull命令后,终端抛出如下错误:
fatal: unable to access'https://gitee.com/gwhsss/self-taught-examination.git/':Could not resolve host: gitee.com命令行尝试连接远程仓库失败,提示"无法解析主机名 gitee.com",导致代码无法推送或拉取。
故障复现场景
# 正常完成开发,提交代码$gitadd.$gitcommit-m"获取+推送"[master 52362f8]获取+推送1filechanged,482insertions(+)# 推送时出现报错$gitpush-uorigin master fatal: unable to access'https://gitee.com/...':Could not resolve host: gitee.com# 即使撤销提交后尝试拉取,同样失败$gitreset--softHEAD~1 $gitpull fatal: unable to access'https://gitee.com/...':Could not resolve host: gitee.com原因分析
Could not resolve host错误的核心是DNS 解析失败。当 Git 尝试通过 HTTPS 协议连接gitee.com时,操作系统需要先将这个域名翻译成 IP 地址(如180.97.125.228),这个翻译过程就叫 DNS 解析。
如果 DNS 服务器无法完成翻译,操作系统就不知道要把网络请求发往哪里,Git 自然也就无法连接到远程仓库。
常见的 DNS 解析失败原因:
- 本地 DNS 缓存污染:系统缓存的域名解析记录过期或错误
- ISP(网络运营商)DNS 服务器故障:默认 DNS 服务器临时性故障或响应超时
- 公司/校园网络限制:部分企业防火墙屏蔽了外部 DNS 或 Git 相关域名
- Gitee DNS 记录变更:平台方调整了服务器 IP,但本地 DNS 还未更新
解决方案
方案一:刷新本地 DNS 缓存(最简尝试)
这是成本最低的初步尝试,可以清除本地缓存的错误 DNS 记录。
# Windows CMD 或 Git Bash 中执行ipconfig /flushdns# macOS / Linux 中执行sudodscacheutil-flushcache# macOSsudosystemd-resolve --flush-caches# Linux (systemd)执行成功后会看到"已成功刷新 DNS 解析缓存"的提示,然后重试 Git 操作:
gitpush-uorigin master方案二:修改系统 Hosts 文件(快速临时方案)
手动指定域名与 IP 的对应关系,绕过 DNS 查询直接通信。
步骤:
以管理员身份打开记事本,打开文件
C:\Windows\System32\drivers\etc\hosts(macOS/Linux 为/etc/hosts)在文件末尾添加:
180.97.125.228 gitee.com保存后测试连通性:
pinggitee.com
如果能 ping 通,即可正常进行 Git 操作:
gitpullgitpush-uorigin master注意:这是临时方案,如果 Gitee 后续更换 IP,需要手动更新 Hosts 文件。
方案三:更换公共 DNS 服务器(推荐方案)
从根源上解决 DNS 解析不稳定问题,更换更可靠的公共 DNS 服务。
Windows 操作步骤:
进入控制面板 → 网络和 Internet → 网络和共享中心
点击当前正在使用的网络连接(如"以太网"或 WLAN 名)
点击属性,找到并双击Internet 协议版本 4 (TCP/IPv4)
选择使用下面的 DNS 服务器地址,填入:
DNS 服务商 首选 DNS 备用 DNS 阿里 DNS 223.5.5.5223.6.6.6百度 DNS 180.76.76.76- 114 DNS 114.114.114.114114.114.115.115Google DNS 8.8.8.88.8.4.4点击确定保存,刷新 DNS 缓存:
ipconfig /flushdns重新尝试 Git 操作:
gitpush-uorigin master
方案四:将远程仓库地址从 HTTPS 切换为 SSH(最佳实践)
SSH 协议通过 IP 直接连接,完全避开 DNS 解析,是长期最优方案。
完整操作流程:
# 1. 生成 SSH 密钥(如果已有可跳过)ssh-keygen-ted25519-C"your_email@example.com"# 连续回车使用默认路径和无密码# 2. 查看并复制公钥cat~/.ssh/id_ed25519.pub# 复制终端输出的完整公钥内容# 3. 登录 Gitee,进入 设置 → SSH公钥 → 添加公钥# 将复制的公钥粘贴保存# 4. 测试 SSH 连接ssh-Tgit@gitee.com# 首次连接会询问是否信任主机,输入 yes# 成功会看到:Hi [用户名]! You've successfully authenticated...# 5. 修改仓库远程地址为 SSH 格式gitremote set-url origin git@gitee.com:gwhsss/self-taught-examination.git# 6. 验证远程地址gitremote-v# 应显示:origin git@gitee.com:gwhsss/self-taught-examination.git (fetch)# origin git@gitee.com:gwhsss/self-taught-examination.git (push)# 7. 正常推送或拉取gitpush-uorigin master方案对比
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 刷新 DNS 缓存 | 操作简单,耗时短 | 不解决根源问题 | 偶发性 DNS 缓存问题 |
| 修改 Hosts | 立即生效,绕过 DNS | 需手动维护 IP | 临时应急,网络受限 |
| 更换 DNS 服务器 | 从根本上改善网络质量 | 需系统设置修改 | DNS 服务器本身故障 |
| 切换 SSH 协议 | 一劳永逸,完全避开 DNS | 首次配置稍复杂 | 长期开发,频繁推送 |
扩展:常见 Git 网络错误总结
除了Could not resolve host,开发中还可能遇到这些与网络相关的 Git 错误:
Failed to connect to gitee.com port 443: Connection refused
代理设置问题,检查git config --global http.proxyConnection timed out
目标服务器无响应,检查网络或代理配置The requested URL returned error: 403
权限认证失败,检查账号密码或 SSH 密钥gnutls_handshake() failed
SSL/TLS 握手失败,常见于代理环境
结语
Could not resolve host这类 DNS 错误看似简单,却可能中断开发流程。对于日常频繁使用 Git 的开发者,建议首选方案四(SSH 协议)作为长期配置,搭配方案三(公共 DNS)优化网络环境,这样既能享受 SSH 的稳定快速,也能在网络切换时有备无患。如果只是临时应急,方案一和方案二也能快速解决问题,让你的代码继续顺畅流转。
