Git:如何重命名本地和远程分支?

Git:如何重命名本地和远程分支?

技术背景

在使用Git进行版本控制时,我们可能会因为各种原因需要重命名分支,比如分支命名不规范、需求变更等。重命名分支既可以在本地操作,也可以同步到远程仓库。

实现步骤

重命名本地和远程分支

  1. 重命名本地分支
    1
    2
    3
    4
    old_name=feature/old
    new_name=feature/new
    remote=origin
    git branch -m $old_name $new_name
    BASH
  2. 删除远程旧分支
    1
    2
    3
    git push $remote --delete $old_name
    # 或使用更简短的方式
    git push $remote :$old_name
    BASH
  3. 取消本地新分支的上游设置
    1
    git branch --unset-upstream $new_name
    BASH
  4. 推送本地新分支到远程
    1
    git push $remote $new_name
    BASH
  5. 设置本地新分支的上游分支
    1
    git push $remote -u $new_name
    BASH

仅重命名远程分支

1
2
3
4
old_name=feature/old
new_name=feature/new
remote=origin
git push $remote $remote/$old_name:refs/heads/$new_name :$old_name
BASH

核心代码

重命名本地和远程分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
old_name=feature/old
new_name=feature/new
remote=origin

# 重命名本地分支
git branch -m $old_name $new_name

# 删除远程旧分支
git push $remote --delete $old_name
git push $remote :$old_name

# 取消本地新分支的上游设置
git branch --unset-upstream $new_name

# 推送本地新分支到远程
git push $remote $new_name

# 设置本地新分支的上游分支
git push $remote -u $new_name
BASH

仅重命名远程分支

1
2
3
4
old_name=feature/old
new_name=feature/new
remote=origin
git push $remote $remote/$old_name:refs/heads/$new_name :$old_name
BASH

最佳实践

  • 使用别名:可以通过设置Git别名来简化操作,例如:
1
2
git config --global alias.move '!git checkout master; git branch -m $1 $2; git status; git push --delete origin $1; git status; git push -u origin $2; git branch -a; exit;'
# 使用方法:git move FROM_BRANCH TO_BRANCH
BASH
  • 使用脚本:编写脚本实现一键重命名,例如:
1
2
3
4
5
6
7
8
9
10
11
git-rename-branch() {
if [ $# -ne 2 ]; then
echo "Usage : ${FUNCNAME[0]} <old branch name> <new branch name>"
echo "Example : ${FUNCNAME[0]} master release"
return 1
fi
git checkout $1
git branch -m $2
git push origin :$1 $2
git push origin -u $2
}
BASH

常见问题

无法删除默认分支

如果要删除的旧分支是远程仓库的默认分支,删除操作会被拒绝,例如:

1
2
! [remote rejected] old-name (refusing to delete the current branch: refs/heads/old-name)
error: failed to push some refs to ...
SUBUNIT

解决方法是先更改默认分支,以GitHub为例:

  1. 进入仓库页面,点击“Settings”。
  2. 找到“Branches”选项,更改默认分支。
  3. 再执行删除旧分支的操作。

重命名后分支跟踪信息未更新

使用git branch -m重命名本地分支时,Git会自动更新跟踪分支的名称。但如果出现问题,可以手动设置上游分支:

1
git branch --set-upstream-to=origin/<new_name> <new_name>
BASH

Git:如何重命名本地和远程分支?
https://119291.xyz/posts/git-how-to-rename-a-branch-both-local-and-remote/
作者
ww
发布于
2025年5月26日
许可协议