你在 Claude Code 里刚刚完成了一个功能。差异显示 +2,148 −14,分支是 main,剩下要做的只是按一下“Create PR”——这时屏幕顶部却弹出了一条红色横幅:

⚠ 无效的请求
无法检查拉取请求的状态。
此信息可能已过期。

恼人的地方在于,“Create PR”按钮明明还在那里,可你却再也看不出当前 PR 处于什么状态了——它是还没创建、已经打开、还是已合并。莫名其妙地、与你的代码改动毫无关系地,只有“这个分支此刻在 GitHub 上是什么样子”这件事变得不可见了。

先说结论:在大多数情况下这并不是致命错误。通常只是 Claude Code 向 GitHub 请求获取最新的 PR 状态,而那一次请求失败了。原因几乎总是两类:要么是与 GitHub 的连接/认证(多半是通过 gh CLI)一时没有打通,要么是这个分支根本还没有 PR / 还没有推送到远程。本文将依次讲解它的机制、5 个根本原因、排查顺序、命令速查表,以及如何防止它再次发生。

CLAUDE CODE · PR STATUS

一眼看懂“无法检查 PR 状态”

— Claude Code 向 GitHub 询问状态,而那一次请求失败了

现象
PR 状态未知
已创建还是没创建——显示变成了旧数据
原因
没连上 GitHub
gh 认证过期,或尚未推送/创建 PR
第一步
gh auth status
确认认证是否仍然有效

本质:这不是“代码问题”,而是“与 GitHub 的通信/认证问题”。
你的工作(代码生成、提交)通常都可以继续,没必要急着开新会话。

1. 这个报错到底在说什么

直白地理解,它的意思是:“我现在无法确认这个分支的拉取请求在 GitHub 上处于什么状态,所以屏幕上显示的信息可能已经过期了。”

关键是要明白有两件事并没有发生。第一,你的代码和差异并没有损坏——+2,148 −14 的改动仍然完好地保留在你的工作区里。第二,它并没有说“PR 创建失败”。这是一条读取侧的警告:“作为创建 PR 之前的一个步骤,我尝试读取当前的 PR 状态(未创建 / 打开 / 已合并 / 已关闭),结果失败了。”

换句话说,这条横幅是一种“无法同步”类型的提示,而且通常是暂时性的。我的看法是:当你看到这条红色横幅时,首先要怀疑的不是“你的代码”,而是“与 GitHub 的连接状态”——具体来说就是这三点:认证是否已过期、网络是否可达,以及这个分支是否处于一个可能存在 PR 的状态(已推送到远程)。

2. 背景:Claude Code 是如何查看你的 PR 的

为什么会出现“无法检查”这种情况?因为 Claude Code 自身并不保存 PR 状态。一个 PR 的真实情况只存在于 GitHub 的服务器上。每一次,Claude Code 都会向 GitHub 查询“这个分支的 PR 处于什么状态?”,再把答案反映到屏幕上的徽标和按钮上。

对于这种查询,命令行版的 Claude Code 默认走的路径是官方的 GitHub CLI(也就是 gh 命令)gh 自己持有 GitHub 的认证令牌(保存在 ~/.config/gh/hosts.yml 等位置),并代你执行 API 调用。从 Claude Code 的视角看,只有当下面这些条件全部满足时,PR 状态才能被正确获取:gh 已完成认证、网络可达,并且远程上存在正确的分支。”

为了准确起见的一点说明

Claude Code 的 GUI 究竟如何刷新 PR 徽标(轮询间隔、缓存策略、错误显示逻辑)这些内部细节并没有官方文档说明。可以确定的是,“获取 PR 状态需要与 GitHub 建立有效连接”,而在实践中,排查问题最终都归结为GitHub 的认证与连通性。本文给出的修复方法正是基于这一确定的部分。

3. 为什么会发生——5 个根本原因

导致“无法检查 PR 状态”的路径大致可以归为 5 类。越靠前的越常见。

5 ROOT CAUSES

PR 状态无法获取的 5 个原因

原因 1 · 认证过期(最常见)
gh 令牌已过期、被撤销,或根本没有登录。重启电脑或系统更新之后尤其常见。用 gh auth status 一查便知。
原因 2 · 还没有 PR / 还没推送
分支还不在远程上,或者你还没有创建 PR。根本没有可供获取的“状态”。先执行 git push
原因 3 · 网络 / 代理
公司代理、VPN、离线状态或 DNS 导致无法访问 api.github.com。如果其他 Git 操作也失败,那基本就是它了。
原因 4 · 权限范围不足
你已经登录,但令牌缺少 repo / read:org 权限范围。在私有仓库或组织中很常见。用 gh auth refresh 授予它们。
原因 5 · 临时性失败(往往无害)
GitHub 的 API 速率限制、偶发的网络抖动,或显示缓存过期。如果认证和网络都正常,通常稍等片刻再重试就会恢复

原因 1–4 属于配置/状态问题(修好之后就不会再犯)。
原因 5 是临时性的。从原因 1(认证)和原因 2(推送/PR 是否存在)入手,是最快的路径。

4. 立即修复——排查顺序

当红色横幅出现时,请从上到下按 4 个步骤逐一排查。大多数情况会在 STEP 1 或 STEP 2 就被锁定。

4 STEPS

排查的顺序

STEP 1 · 检查认证
运行 gh auth status如果看不到“Logged in”,说明认证已过期。用 gh auth login 重新登录。这能解决绝大多数情况。
STEP 2 · 推送与 PR 是否存在
git push -u origin <branch> 推送到远程,再用 gh pr status 确认是否存在 PR。如果没有,直接创建一个即可。
STEP 3 · 连通性与权限范围
关闭 VPN/代理或换一个网络试试。如果缺少权限范围,用 gh auth refresh -s repo,read:org 授予它们。
STEP 4 · 等待 / 重试
如果 1–3 都正常,那就是临时性问题。稍等片刻再重试,或者将 Claude Code 更新到最新版本并重启。

原则:“在怀疑代码之前,先怀疑与 GitHub 的连接。”
STEP 1 的 gh auth status 是通往真正原因最快的一步。

还有一点:即使这条横幅出现,你的本地提交和工作区也是安全的。没必要急着执行 git reset 或者丢弃会话。先修好连接,再按一次“Create PR”——大多数情况下就能成功。如果仍然无法创建,就手动从 CLI 运行 gh pr create,绕过 Claude Code 的 UI 直接创建 PR。

5. 命令速查表

下面是用于诊断的命令。从上到下依次运行,你自然就能缩小到底是哪个原因(CAUSE)。

目的命令要看什么
认证是否有效?gh auth status是否出现“Logged in to github.com” / 令牌的权限范围
重新登录gh auth login交互式;浏览器认证最为可靠
添加权限范围gh auth refresh -s repo,read:org私有/组织仓库经常缺这些
检查远程配置git remote -vorigin 是否指向正确的 GitHub 仓库
推送分支git push -u origin <branch>满足“PR 可以存在”的前提条件
PR 是否存在 / 状态gh pr status当前分支是否有 PR / 是打开还是已合并
通过 CLI 创建 PRgh pr create不经过 GUI 直接创建(替代方案)
连通性检查gh api rate_limit有响应就说明连接正常 / 查看剩余配额是否触及速率限制

如果 gh auth status 返回“Logged in”,并且 gh pr status 也能正常响应,那很可能只是 Claude Code 的显示是旧的而已。更新到最新版本并重启,徽标就会重新正确同步。

6. “信息可能已过期”可以忽略吗

“此信息可能已过期”这句话在不同情况下含义不同。你需要分清什么时候可以忽略,什么时候必须采取行动。

✅ 可以忽略(无害)

  • gh auth status 正常
  • 其他 Git/push 操作都能正常通过
  • 稍等片刻 / 重试后就消失了
  • 只是 PR 徽标短暂地显示成了旧状态

→ 只是同步延迟 / 缓存。继续工作即可。

⚠ 需要处理(真实问题)

  • gh auth status 显示“未登录”
  • push 和 pull 都失败
  • 无论重试多少次都消除不了
  • 按“Create PR”毫无进展

→ 这是真正的认证/连接问题。用 STEP 1–3 修复它。

决定性的判断依据,再说一次,就是一条 gh auth status。如果它是绿色的(Logged in),而且其他 Git 操作都能通过,那你就可以不去管这条横幅。反过来,如果认证已经失效,那么除了 PR 之外的操作(push、获取评审等)迟早也会失败,所以当场修好它才明智。

7. 防止再次发生的清单

一份实用的清单,让同一条红色横幅不再反复打扰你。

养成偶尔检查 gh auth status 的习惯(令牌可能在几周内就过期)。 如果你使用私有/组织仓库,一开始就用 gh auth refresh -s repo,read:org 授予所需的权限范围 开始在新分支上工作时,尽早执行 git push -u origin <branch>(让它处于一个可能存在 PR 的状态,能让显示更稳定)。 在公司网络(代理/VPN)下,用 gh api rate_limit 先验证一次连通性 让 Claude Code 保持最新——显示与同步方面的改进会持续推出。 如果 GUI 一直不稳定,就把创建 PR 的方式切换到 gh pr create(最为可靠)。

总结

Claude Code 的“无法检查拉取请求的状态。此信息可能已过期”表明的不是代码缺陷,而是向 GitHub 发起的查询(多半通过 gh CLI)一时没有打通。它通常只是无害的同步延迟,但背后也可能隐藏着认证过期、分支未推送 / 缺少 PR、网络问题,或权限范围不足

最快的诊断方式:① 用 gh auth status 检查认证② 用 git push + gh pr status 检查推送与 PR 是否存在③ 检查连通性与权限范围④ 如果都正常,就等待并重试,再更新到最新版本。当你确实无法从 GUI 创建时,直接用 gh pr create 创建即可。记住“在怀疑代码之前,先怀疑与 GitHub 的连接”,这条红色横幅就再也吓不到你了。

延伸阅读:什么是 GitHub Copilot什么是 Claude Agent SDKClaude Code 的思考块 400 错误,以及 Claude Code / Cursor 的部署工作流

FAQ

Q. 出现这个错误,我的代码或差异会丢失吗?
A. 不会。这是通信侧的警告,表示“无法读取 PR 状态”;它对你的本地提交、工作区或差异(比如 +2,148 −14)没有任何影响。没必要急着执行 git reset 或丢弃会话。

Q. 我应该先检查什么?
A. gh auth status这一条命令就能告诉你 GitHub 认证是否仍然有效。如果看到“Logged in”,说明认证没问题——通常是临时性的,等一会儿再重试即可。如果没有,就用 gh auth login 重新登录,大多数情况就能解决。

Q. “此信息可能已过期”可以不管它吗?
A. 如果认证和网络都正常,可以。它往往只是同步延迟 / 缓存,稍等或重试后就会消失。但如果 gh auth status 显示“未登录”,或者连 push 都失败,那就是真正的问题——去修好它。

Q. 无论试多少次,“Create PR”都通不过。
A. 绕过 GUI,直接从终端运行 gh pr create,这样你就能创建出 PR 本身。如果仍然失败,用 git push -u origin <branch> 检查分支是否在远程上,并用 git remote -v 检查 origin 是否指向正确的仓库。

Q. 在公司网络下经常出现,为什么?
A. 很可能是代理、VPN 或防火墙阻断了到 api.github.com 的流量。检查 gh api rate_limit 是否有响应;如果没有,就需要在网络侧放行(把 GitHub 的域名加入允许列表)。临时关闭 VPN 来隔离问题也很有帮助。