确认远程仓库当前真实分支应使用 git ls-remote --heads origin,它直连远程读取 refs/heads/ 下原始引用,不依赖本地缓存、不污染状态、结果最准,输出为 commit-hash refs/heads/name 格式。

想确认远程仓库当前到底有哪些分支,别信本地缓存——直接用 git ls-remote --heads origin,它返回的是服务器上真实存在的 refs/heads/ 引用,不依赖 fetch、不污染本地状态、结果最准。
查远程真实分支:用 git ls-remote --heads origin
这个命令绕过所有本地引用缓存,直连远程仓库读取原始分支指针。适合新克隆环境、CI 脚本验证、或怀疑同事已删分支但本地还残留时使用。
- 输出格式是
a1b2c3d refs/heads/main这类纯哈希+路径,没有别名、不解析remote.origin.fetch配置 - 加
grep快速筛选:git ls-remote --heads origin | grep "feature/" - 统计总数更可靠:
git ls-remote --heads origin | wc -l,比git branch -r | wc -l少受过期缓存干扰 - 注意:如果远程不可达(权限/防火墙/网络问题),会报错并中断;加
-q会静默错误,但掩盖了真实问题,日常排查时不建议加
查本地已知的远程分支快照:用 git branch -r
它只显示你本地 .git/refs/remotes/origin/ 下已有的跟踪分支,本质是上一次 git fetch 的快照。速度快、易读,但不是实时的。
使用 `gh` CLI 与 GitHub 交互。通过`gh issue`、`gh pr`、`gh run` 和 `gh api` 管理 issue、PR、CI 运行以及高级查询。
- 刚克隆完仓库后执行,通常只看到
origin/HEAD和origin/main(或origin/master),其他分支不会出现——因为你还没fetch过 - 别人删了远程分支,
git branch -r仍会显示旧记录,直到你运行git remote prune origin或git fetch --prune - 想更新这个列表,必须先
git fetch origin;若只想拉某一分支,如git fetch origin feature/new-api,则其他分支依然不会出现在git branch -r输出中
查分支跟踪关系与同步状态:用 git branch -vv
这不是查“有哪些分支”,而是查“哪些本地分支正在跟踪谁、差几个提交”。它是日常开发中最实用的状态视图。
- 输出里
[origin/main: ahead 2, behind 1]表示本地比远程多 2 提交、少 1 提交;[origin/dev: gone]表示远程分支已不存在,该跟踪关系失效 - 它不显示未设置 upstream 的本地分支(比如刚
git checkout -b temp出来的),也不显示纯远程分支(如origin/xxx本身) - 状态值依赖本地已有远程引用,所以必须先
git fetch再跑git branch -vv,否则 ahead/behind 计数不准 - 即使显示
[origin/xxx: ahead 0, behind 0],也不能保证绝对一致——得确认origin/xxx本身是否最新,必要时再git fetch origin xxx
查远程仓库完整元数据:用 git remote show origin
它不只是列分支,还会告诉你哪些远程分支有对应本地跟踪分支、哪些被远程删除、哪些是新出现但尚未 fetch 的,对团队协作中的清理和排障最有用。
- 关键区块包括 “New remote branches”(说明有分支存在但你本地还没 fetch)、“Stale tracking branches”(列出该 prune 的过期引用)
- 默认会尝试连接远程仓库,若网络慢或权限不足,可能卡住几秒甚至超时;生产脚本中慎用,可加
-n跳过自动 fetch:git remote show -n origin - 输出中 “Local ref configured for 'git push'” 行明确告诉你哪些本地分支设置了默认推送目标,适合排查
git push报错
真正麻烦的地方不在命令本身,而在「你以为看到的就是真实的」——git branch -r 和 git branch -a 显示的都是本地缓存,而 git ls-remote 虽然真实,却不告诉你哪个分支该 checkout、哪个该 prune。实际协作中,往往要组合使用:先 git ls-remote --heads origin 确认远程有什么,再 git fetch --prune 同步本地元数据,最后用 git branch -vv 判断工作流是否健康。










