解决 Git 推送/拉取报错:Could not resolve host: gitee.com

解决 Git 推送/拉取报错:Could not resolve host: gitee.com

问题现象

在使用 Gitee(码云)进行代码管理时,执行 git pushgit 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 查询直接通信。

步骤

  1. 以管理员身份打开记事本,打开文件 C:\Windows\System32\drivers\etc\hosts(macOS/Linux 为 /etc/hosts

  2. 在文件末尾添加:

    复制代码
    180.97.125.228 gitee.com
  3. 保存后测试连通性:

    bash 复制代码
    ping gitee.com

如果能 ping 通,即可正常进行 Git 操作:

bash 复制代码
git pull
git push -u origin master

注意:这是临时方案,如果 Gitee 后续更换 IP,需要手动更新 Hosts 文件。

方案三:更换公共 DNS 服务器(推荐方案)

从根源上解决 DNS 解析不稳定问题,更换更可靠的公共 DNS 服务。

Windows 操作步骤

  1. 进入 控制面板 → 网络和 Internet → 网络和共享中心

  2. 点击当前正在使用的网络连接(如"以太网"或 WLAN 名)

  3. 点击 属性 ,找到并双击 Internet 协议版本 4 (TCP/IPv4)

  4. 选择 使用下面的 DNS 服务器地址,填入:

    DNS 服务商 首选 DNS 备用 DNS
    阿里 DNS 223.5.5.5 223.6.6.6
    百度 DNS 180.76.76.76 -
    114 DNS 114.114.114.114 114.114.115.115
    Google DNS 8.8.8.8 8.8.4.4
  5. 点击确定保存,刷新 DNS 缓存:

    bash 复制代码
    ipconfig /flushdns
  6. 重新尝试 Git 操作:

    bash 复制代码
    git 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() failed

    SSL/TLS 握手失败,常见于代理环境

结语

Could not resolve host 这类 DNS 错误看似简单,却可能中断开发流程。对于日常频繁使用 Git 的开发者,建议首选 方案四(SSH 协议) 作为长期配置,搭配 方案三(公共 DNS) 优化网络环境,这样既能享受 SSH 的稳定快速,也能在网络切换时有备无患。如果只是临时应急,方案一和方案二也能快速解决问题,让你的代码继续顺畅流转。

相关推荐
深海鱼在掘金2 天前
Git 完全指南 —— 第1章:Git 概览与版本控制演进
git
noravinsc3 天前
关于Git Flow
git
蜜獾云3 天前
在Git中配置用户名和密码
git
scx_link3 天前
通过git bash在本地创建分支,并推送到远程仓库中
开发语言·git·bash
南大白3 天前
IntelliJ IDEA 运行时的 JVM 本地内存溢出崩溃
git
码农小旋风3 天前
Claude Code 基础用法大全:对话、分析、修改、测试、Git 和工作流
人工智能·git·chatgpt·claude
南大白3 天前
Git 撤回提交完整方案
git
像风一样的男人@3 天前
python --实现代理服务器
git·ui
sbjdhjd3 天前
从零搭建企业级 CI/CD(下):Jenkins+GitLab+Harbor 全链路实战指南
git·servlet·ci/cd·云原生·云计算·gitlab·jenkins
码云数智-大飞3 天前
Go Channel 详解:并发通信的正确姿势
前端·数据库·git