如何重命名 Git 分支(本地和远程)
重命名分支:git branch -m 新名(本地);远程没有"重命名",需推新名分支 git push -u origin 新名,删旧远程分支 git push origin --delete 旧名,并让协作者更新本地跟踪。
本地重命名:git branch -m 新分支名。远程没有重命名概念,要"推新的、删旧的":git push -u origin 新名 建立新远程分支,git push origin --delete 旧名 删掉旧的。
完整流程
# 1. 本地重命名(站在要改名的分支上)
git checkout old-name
git branch -m new-name
# 2. 推送新分支并建立跟踪
git push -u origin new-name
# 3. 删除远程旧分支
git push origin --delete old-name
协作者要做什么
协作者先保存本地未提交工作;fetch --prune清除远程跟踪引用,不会删除其本地分支。已有old-name时可保留其提交并改名:
git fetch --prune # 清掉旧的 origin/old-name
git branch -m old-name new-name # 先确认无同名分支冲突
git branch --set-upstream-to=origin/new-name new-name
注意事项
- GitHub开放PR需区分head(来源)和base(目标)分支:网页Rename会更新以该分支为base的开放PR,但head分支改名可能关闭对应PR;不能保证所有PR都会转移。删建之前逐一核查;
- main/master 这类保护分支改名(如 master→main)GitHub 有专门的界面操作,会自动处理重定向,别用命令行删建。
常见问题(FAQ)
Q:改名后 CI/保护规则会跟着走吗?
分支保护规则、CI 触发条件通常按名字匹配——改名后去检查一遍这些配置。
Q:本地没推过的分支改名?
纯本地分支只需第一步 git branch -m 新名,远程无感知。
Q:GitHub 网页改名和命令行有区别吗?
网页改名(分支页面的 Rename 按钮)会处理部分链接和base分支引用,但不能保证保留以该分支为head的所有开放PR,比重命名的命令行三板斧更友好。