git 2.22 或更早版本不支持 --track 参数和 git switch,应改用 git checkout -b 本地名 origin/远程名 或分步执行 git checkout -b 本地名 后 git branch --set-upstream-to=origin/远程名 本地名。

git switch -c 本地名 --track origin/远程名 报错“unknown option: --track”
说明你用的是 Git 2.22 或更早版本,--track 参数和 git switch 命令都是 2.23+ 才加入的。别急着升级 Git,有更稳妥的替代方案:
- 直接用
git checkout -b 本地名 origin/远程名(兼容所有版本,但注意:它会静默切换已有同名分支) - 或分两步:
git checkout -b 本地名→git branch --set-upstream-to=origin/远程名 本地名 - 验证是否生效:
git branch -vv输出中该分支后应出现[origin/远程名]
git checkout origin/xxx 后 HEAD detached at xxx 是什么状态
这不是分支,是“分离 HEAD”状态——Git 把你临时停在某个 commit 上,不归属任何分支。后续所有 git commit 都不会自动关联到任何分支,切走就丢。
- 没提交过?用
git switch -立刻退回上一个分支 - 已经提交了?先
git switch -c temp把当前 commit 救成一个命名分支,再git merge回目标分支 - 根本不想进这个状态?永远别写
git checkout origin/xxx,要切就用git switch -c xxx --track origin/xxx或等价写法
git branch -vv 显示 [gone] 怎么办
不是 Git 同步慢,是远程分支真被删了。origin/xxx 这个引用还留在你本地缓存里,但远端仓库里已不存在该分支。
- 继续
git pull会失败;git push可能被拒绝 - 只取消跟踪:
git branch --unset-upstream xxx - 批量清理所有失效引用:
git remote prune origin(只删refs/remotes/origin/xxx,不影响你的本地xxx分支) - 查证是否真没了:
git ls-remote --heads origin xxx,无输出即确认删除
切换后 git status 提示 “Your branch is behind 'origin/xxx'”
这不表示出错,而是告诉你:本地分支只复制了远程分支当时的 HEAD,没拉取后续新提交。尤其多人协作时很常见。
- 立刻同步:
git pull(前提是已设 upstream) - 先看差多少:
git log HEAD..origin/xxx --oneline - 如果工作区有未提交修改,
git pull可能触发冲突——建议先git stash,拉完再git stash pop - 别指望
git switch或git checkout -b自动帮你pull,它们只负责分支指针和初始代码快照
release/v1.2)时,命令里必须写全 origin/release/v1.2,漏掉 origin/ 或误写成 release/v1.2 都会找不到引用。这种细节一错,整个流程就卡在第一步。











