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

131

有没有一种方法可以在本地重命名Git分支并将其推送到远程分支,即使已经有许多提交被推送到远程分支?

或者,是否需要创建一个新的本地分支,删除旧的本地分支,然后在远程仓库上重复操作?

1个回答

225

是的,

move 功能用于本地重命名分支。

git branch --move <old_name> <new_name>

但要推送它,您必须删除旧版本并推送新版本。

git checkout <new_name>
git push origin [--set-upstream] <new_name>
git push origin --delete <old_name>

--set-upstream 是可选的,它可以配置新的本地分支跟踪推送的分支。

你可以使用以下简写命令:

  • 本地移动 (--move):

  git branch -m <old_name> <new_name>
  • 推送新分支(--set-upstream,可选):

      git push origin [-u] <new_name>
    
  • 删除 (--delete) :

  •   git push origin -d <old_name>
    

    NB.

    感谢torek的评论:

    值得一提的是,您应该:

    1. 通知其他共享上游代码库的用户,让他们知道您将执行此操作;
    2. 按照所示顺序进行(先设置新名称,然后删除旧名称)。

    第一步的原因在于这些用户需要进行调整。

    第二步的原因主要是效率:它避免了将对象重新复制到一个删除分支提交的上游仓库(大多数裸仓库都会这样做,而大多数接受推送的仓库也是裸的)。


    4
    非常微小。我相信你正在混淆在本地删除一个分支和使用远程缩写的branch -D。但是在最新版本的git(git版本2.14.+)中不存在-D选项作为--delete的缩写,而是小写的-d。因此,应为git push origin -d <old_name> - Novice C
    如果您在 GitHub 上有一个使用 <old_name> 的 Open PR,当您删除远程分支时,它将被关闭,因此您需要创建一个新的。因为目前没有办法更改 PR 基于的分支(您只能更改目标)。 - Martin Marconcini
    更简洁的删除远程分支的方法是 git push origin :[旧分支名称] - occasl
    对于某些远程仓库(例如Bitbucket),在执行最后一步(--delete)之前,您需要将分支“取消分配”作为仓库的“默认”分支。 - Janaka Bandara

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接