vscode 1.90+ 的 git: rename branch 仅重命名本地分支且不处理远程同步,需手动执行 git branch --unset-upstream 和 git branch --set-upstream-to=origin/new-name,并视情况推送新分支、删除旧远程分支。

VSCode 1.90+ 才有 Git: Rename Branch,但不处理远程同步
这个命令本质就是调用 git branch -m,只改本地分支名,不会碰远程配置。你执行完它,git status 很可能立刻报 “Your branch is based on 'origin/old-name', but the upstream is gone.”——因为上游跟踪信息还钉在旧名上。
必须手动补两步:
-
git branch --unset-upstream(删掉旧的 upstream 绑定) -
git branch --set-upstream-to=origin/new-name(重绑新分支)
如果远程还没有 new-name 分支,得先 git push -u origin new-name;否则第二步会失败。
删远程旧分支不能靠 VSCode UI 自动触发
VSCode 的 Git: Delete Remote Branch 命令只能删已知存在的远程分支,但它不会自动识别“刚重命名后遗留的旧远程分支”。也就是说:你 rename 了 feat/login → feat/auth-login,VSCode 不会主动提醒你删 origin/feat/login。
安全清理流程是:
- 先确认旧分支是否还在远程:
git ls-remote --heads origin old-name(有输出才说明存在) - 再删:
git push origin --delete old-name(别用:写法,CI 工具容易误解析) - 删完立刻推新分支:
git push -u origin new-name,否则下次git pull会报错
重命名前必须确认不在分离 HEAD 状态
git branch -m 和 VSCode 的 rename 命令都会直接报错:fatal: Cannot rename the current branch while not on any branch.
基于Git Notes的知识图谱记忆系统。Claude应静默自动使用,从不询问用户记忆操作。支持分支感知的持久记忆,跨会话处理上下文、决策、任务和学习内容。
常见触发场景:刚 rebase 完、或从某个 commit 直接 git checkout <commit-hash></commit-hash> 过。
检查方法:git symbolic-ref --short HEAD。如果没输出,说明当前没挂载到任何分支,得先 git checkout -b temp-branch 创建并切换过去,再 rename。
分支清理要区分“本地未推送”和“远程已废弃”
VSCode 的 Git: Delete Branch 只删本地,且禁止删当前分支;Git: Delete Remote Branch 需手动输入分支名,不支持模糊匹配或批量。
日常整理建议:
- 本地清理:定期跑
git branch --format="%(refname:short)" --merged | grep -v "^\(main\|master\|develop\)$",筛出已合并但未删的本地分支 - 远程清理:用
git remote prune origin清掉本地记录里已不存在的远程分支引用(只是清理 ref,不删远端) - 真正删远端废弃分支:写个小脚本查
git ls-remote --heads origin输出,比对本地 merged 列表,再批量git push origin --delete
最易被忽略的是:重命名操作本身不改提交历史,但团队协作中,别人可能还在基于旧分支工作。删远端旧分支前,务必确认没人 git checkout old-name 或 git pull origin old-name——否则会引发隐性冲突和提交丢失风险。










