因为 git branch 默认只列出本地分支,远程分支需用 git branch -r 查看;git branch -a 可显示全部分支,包括形如 origin/xxx 的远程跟踪分支。

git branch 查看本地分支时为什么看不到远程分支
因为 git branch 默认只列出本地分支。远程分支(比如 origin/main)不会出现在这个列表里,这是设计使然,不是命令出错。
常见错误现象:执行 git branch 后只看到 main 或 master,以为远程分支没拉下来;其实只是没显示而已。
- 用
git branch -r查看远程分支(remote branches) - 用
git branch -a查看所有分支(本地 + 远程跟踪分支) - 远程跟踪分支名形如
origin/feature/login,它不是本地可切换的分支,而是对远程分支的“快照”
git branch -v 显示的提交哈希后面带 [gone] 是什么意思
表示该本地分支所跟踪的远程分支已从远程仓库中删除,但本地仍保留了这个跟踪关系。Git 无法再 fetch 到对应更新,git pull 会报错或无效。
典型场景:团队成员合并 PR 后删掉了远程 feature/x 分支,你本地还留着 feature/x 并设置了 upstream。
- 检查哪些分支已失效:运行
git remote prune origin(先模拟)→ 加--dry-run参数预览 - 真正清理:执行
git remote prune origin,它会删掉本地标记为[gone]的远程跟踪引用 - 如果想一并删掉本地已无用的分支,得手动
git branch -d feature/x(安全删除)或-D(强制)
为什么 git branch --sort=-committerdate 排序后,新创建的分支不在最上面
因为 --sort=-committerdate 按的是「最后一次提交的作者时间」排序,不是分支创建时间。刚新建的空分支(没任何 commit)没有自己的提交,会沿用其来源分支的最新提交时间。
比如从 main(最新提交是 2 小时前)切出 fix/bug,这个新分支在排序里就和 main 并列,而不是排第一。
- 真正想看“最近新建的分支”,只能靠命名习惯 + 时间戳(如
feat/20240521-login-ui),Git 本身不记录分支创建时间 -
git for-each-ref --sort=-committerdate --format='%(refname:short) %(committerdate:short)' refs/heads/可以更清晰地看到排序依据 - 注意:Windows Git Bash 中
--sort对中文路径或某些 locale 可能异常,建议统一用英文终端环境
用 git branch -m 重命名分支后,远程关联丢失怎么办
git branch -m 只改本地分支名,不会自动更新远程跟踪配置。原分支(如 dev)推送到远程的记录、upstream 设置都还指向旧名,新分支默认无远程关联。
容易踩的坑:重命名后直接 git push,结果推了一个同名新分支到远程,旧分支还在,造成混乱。
- 先删掉旧远程分支:
git push origin --delete dev - 把本地新分支推上去并设置 upstream:
git push -u origin new-dev - 或者一步到位(Git 2.29+):
git branch -m dev new-dev && git push origin :dev new-dev && git branch --set-upstream-to=origin/new-dev new-dev
分支名变更在协作环境中影响明显,务必同步通知队友,尤其当 CI/CD 流水线依赖特定分支名时。











