解决 Git 推送/拉取报错:Could not resolve host: gitee.com
问题现象
在使用 Gitee(码云)进行代码管理时,执行 git push 或 git pull 命令后,终端抛出如下错误:
bash
fatal: unable to access 'https://gitee.com/gwhsss/self-taught-examination.git/': Could not resolve host: gitee.com
命令行尝试连接远程仓库失败,提示"无法解析主机名 gitee.com",导致代码无法推送或拉取。
故障复现场景
bash
# 正常完成开发,提交代码
$ git add .
$ git commit -m "获取+推送"
[master 52362f8] 获取+推送
1 file changed, 482 insertions(+)
# 推送时出现报错
$ git push -u origin master
fatal: unable to access 'https://gitee.com/...': Could not resolve host: gitee.com
# 即使撤销提交后尝试拉取,同样失败
$ git reset --soft HEAD~1
$ git pull
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 记录。
bash
# Windows CMD 或 Git Bash 中执行
ipconfig /flushdns
# macOS / Linux 中执行
sudo dscacheutil -flushcache # macOS
sudo systemd-resolve --flush-caches # Linux (systemd)
执行成功后会看到"已成功刷新 DNS 解析缓存"的提示,然后重试 Git 操作:
bash
git push -u origin master
方案二:修改系统 Hosts 文件(快速临时方案)
手动指定域名与 IP 的对应关系,绕过 DNS 查询直接通信。
步骤:
-
以管理员身份打开记事本,打开文件
C:\Windows\System32\drivers\etc\hosts(macOS/Linux 为/etc/hosts) -
在文件末尾添加:
180.97.125.228 gitee.com -
保存后测试连通性:
bashping gitee.com
如果能 ping 通,即可正常进行 Git 操作:
bash
git pull
git push -u origin 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 缓存:
bashipconfig /flushdns -
重新尝试 Git 操作:
bashgit push -u origin master
方案四:将远程仓库地址从 HTTPS 切换为 SSH(最佳实践)
SSH 协议通过 IP 直接连接,完全避开 DNS 解析,是长期最优方案。
完整操作流程:
bash
# 1. 生成 SSH 密钥(如果已有可跳过)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 连续回车使用默认路径和无密码
# 2. 查看并复制公钥
cat ~/.ssh/id_ed25519.pub
# 复制终端输出的完整公钥内容
# 3. 登录 Gitee,进入 设置 → SSH公钥 → 添加公钥
# 将复制的公钥粘贴保存
# 4. 测试 SSH 连接
ssh -T git@gitee.com
# 首次连接会询问是否信任主机,输入 yes
# 成功会看到:Hi [用户名]! You've successfully authenticated...
# 5. 修改仓库远程地址为 SSH 格式
git remote set-url origin git@gitee.com:gwhsss/self-taught-examination.git
# 6. 验证远程地址
git remote -v
# 应显示:origin git@gitee.com:gwhsss/self-taught-examination.git (fetch)
# origin git@gitee.com:gwhsss/self-taught-examination.git (push)
# 7. 正常推送或拉取
git push -u origin 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.proxy -
Connection timed out目标服务器无响应,检查网络或代理配置
-
The requested URL returned error: 403权限认证失败,检查账号密码或 SSH 密钥
-
gnutls_handshake() failedSSL/TLS 握手失败,常见于代理环境
结语
Could not resolve host 这类 DNS 错误看似简单,却可能中断开发流程。对于日常频繁使用 Git 的开发者,建议首选 方案四(SSH 协议) 作为长期配置,搭配 方案三(公共 DNS) 优化网络环境,这样既能享受 SSH 的稳定快速,也能在网络切换时有备无患。如果只是临时应急,方案一和方案二也能快速解决问题,让你的代码继续顺畅流转。