重命名已推送的 git 分支必须分三步:先用 git branch -m 改本地名,再用 git push origin --delete 删除远程旧分支,最后用 git push origin -u 新名设上游;跳过任一步会导致远程残留、ci 失败或协作者推送错误。

重命名已推送的 Git 分支,必须分三步:改本地名 → 删远程旧名 → 推新名并设上游。跳过任何一步,都会导致远程残留旧分支、CI/CD 失败或协作者 push 错目标。
git branch -m 只改本地,不碰远程
执行 git branch -m old-name new-name 后,.git/refs/heads/ 下的引用被更新,但远程仓库完全无感知——origin/old-name 依然存在,且你的本地分支不会自动关联到 origin/new-name。
- 当前就在待重命名分支上?直接
git branch -m new-name(不用写旧名) - 不在该分支?先
git checkout old-name或git switch old-name,再git branch -m new-name - 如果报错
Cannot rename the currently checked out branch,说明你没切走——Git 强制要求先离开目标分支 - 改完用
git branch确认旧名已消失、新名已列出;别只信git status,它只显示当前分支名
git push origin --delete 是删远程分支的唯一安全方式
远程旧分支必须显式删除,否则它会一直挂着,CI 配置、PR 页面、Webhook 都可能继续指向它。
- 正确命令是
git push origin --delete old-name(Git 2.0+ 推荐)或等价的git push origin :old-name - 千万别手抖写成
git push origin :new-name——这会把你刚推上去的新分支又删掉 - 如果远程已有同名分支(比如别人也建了
new-name),git push origin -u new-name会失败,得先协调或换名 - 执行前检查 CI 配置文件(如
.github/workflows/*.yml、.gitlab-ci.yml)是否硬编码了old-name,否则删完就流水线中断
git push origin -u new-name 必须在删旧之后执行
删掉 origin/old-name 后,再运行 git push origin -u new-name。其中 -u(即 --set-upstream)会把本地 new-name 关联到 origin/new-name,让后续 git pull、git push 默认走这个路径。
- 如果先推新名再删旧名,远程会短暂存在两个分支,容易引发误操作
- 协作者 fetch 后仍保留
origin/old-name追踪,需手动运行git remote prune origin或删掉本地远程跟踪引用:git branch -r --format="%(refname:short)" | grep old-name | xargs -I {} git branch -r -d {} - IDE(如 VS Code、IntelliJ)常缓存分支名,重命名后可能仍显示旧名或推送目标错误——关掉项目再重开,或手动触发 “Git: Refresh”
最易被忽略的是团队协作影响:删掉远程旧分支后,其他人的本地 origin/old-name 不会自动消失,也不会自动关联到新分支。没人通知的话,他们下次 git pull 会失败,git push 可能报错或推到错误位置。











