git branch -m 是唯一标准命令,仅重命名本地分支;必须同步删除远程旧分支、推送新分支并修复上游跟踪,否则远程跟踪断开、ci/cd异常、团队协作混乱。

重命名 Git 分支不能只改本地名,否则远程跟踪会断开、CI/CD 仍跑旧分支、团队协作立刻混乱。你必须同步处理本地分支名、远程分支删除与推送、上游跟踪关系三件事,缺一不可。
git branch -m 只改本地,不碰远程
git branch -m 是唯一标准命令,-m 是 --move 缩写,不是什么 “Branch-M”。它只操作本地 .git/refs/heads/ 下的引用文件,完全不影响远程仓库。
- 当前在待重命名分支上:直接运行
git branch -m new-name - 不在该分支上:必须指定旧名,如
git branch -m old-name new-name - 如果
new-name已存在,Git 报错:fatal: A branch named 'xxx' already exists. - 重命名后立即执行
git status,大概率看到提示:Your branch is based on 'origin/old-name', but the upstream is gone.—— 这说明上游跟踪已失效
远程分支必须手动删旧推新
远程没有“重命名”操作,只有“删 + 推”两步。用 git push origin new-name 后不删旧分支,会导致远程同时存在 old-name 和 new-name,PR 关联、CI 触发、权限策略全乱套。
监控一个或多个 GitCode 仓库的 PR,通过 OpenClaw Gateway 自动执行 AI 审查,发布 PR 评论,并发送钉钉和企业微信通知。
- 先确认远程旧分支是否存在:
git ls-remote --heads origin old-name(有输出才需删) - 删远程旧分支:
git push origin --delete old-name(别用git push origin :old-name,可读性差且部分 CI 工具不兼容) - 推新分支并设上游:
git push -u origin new-name(-u等价于--set-upstream-to=origin/new-name) - 如果远程没有
new-name,git push -u才会创建它;如果已有,-u仅设置跟踪关系
上游跟踪关系要手动修复
git branch -m 不会自动更新 branch.<name>.merge</name> 和 branch.<name>.remote</name> 配置项。旧的上游信息残留会导致 git pull、git push 默认仍找 origin/old-name。
- 先清除旧上游:
git branch --unset-upstream - 再绑定新上游:
git branch --set-upstream-to=origin/new-name - 或者一步到位:
git push -u origin new-name(前提是远程已有new-name) - 如果远程还没
new-name,得先git push origin new-name,再git branch --set-upstream-to=origin/new-name
VSCode 的 Git: Rename Branch 命令不解决同步问题
VSCode 1.90+ 内置了 Git: Rename Branch 命令(Ctrl+Shift+P 输入即可),但它底层就是调用 git branch -m,**不做任何远程操作,也不修上游配置**。
- 该命令在分离 HEAD 状态下不可用(比如刚 rebase 完或从 commit 检出),会报错:
fatal: Cannot rename the current branch while not on any branch. - 老版本 VSCode 或禁用 Git 扩展时,这个命令根本不会出现 —— 别依赖 UI,终端敲命令更稳
- 重命名后,你仍需手动执行
git push origin --delete old-name和git push -u origin new-name - 团队成员不会自动感知变更:他们得自己删本地
old-name,再git fetch拉取new-name
最易被忽略的是上游配置残留和远程旧分支未清理——这两点会让后续所有 git pull、git push 行为指向错误目标,且错误提示往往模糊(比如 “non-fast-forward” 或 “upstream disappeared”),排查起来比重命名本身耗时得多。










