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


450

我有四个分支,例如master-> origin / regacy,FeatureA-> origin / FeatureA。如您所见,我输入了错误的名称。

所以我想重命名一个远程分支名称(起源/旧式→起源/旧式或起源/主版)

我尝试下面的命令:

git remote rename regacy legacy

但是Git控制台向我返回了一条错误消息。

 error : Could not rename config section 'remote.regacy' to 'remote.legacy'

我怎么解决这个问题?




Answers:


803

在此处输入图片说明


有几种方法可以做到这一点:

  1. 更改您的本地分支,然后进行更改
  2. 用新名称将分支推送到远程,同时在本地保留原始名称

重命名本地和远程

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

# Delete the old branch on remote - where <remote> is, for example, origin
git push <remote> --delete <old_name>

# Or shorter way to delete remote branch [:]
git push <remote> :<old_name>

# Push the new branch to remote
git push <remote> <new_name>

# Reset the upstream branch for the new_name local branch
git push <remote> -u <new_name>

在此处输入图片说明


重命名仅远程分支

信用:ptim

# In this option, we will push the branch to the remote with the new name
# While keeping the local name as is
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

重要的提示:

当您使用git branch -m(移动)时,Git还将使用新名称更新您的跟踪分支。

git remote rename legacy legacy

git remote rename正在尝试更新配置文件中的远程部分。它将使用给定名称的遥控器重命名为新名称,但是在您的情况下,它找不到任何名称,因此重命名失败。

但这不会按照您的想法进行。它将重命名您的本地配置远程名称,而不是远程分支。 


注意 Git服务器可能允许您使用Web界面或外部程序(例如Sourcetree等)来重命名Git分支,但是必须记住,在Git中所有工作都是在本地完成的,因此建议使用上述命令去工作。


在上述操作之后,您仍然需要做一些事情,当我尝试拉动时,我会收到消息:Your configuration specifies to merge with the ref ''refs/heads/old_name'
KrzysztofKrasoń18年

6
不要忘记重置旧的上游:git checkout <new_name> ; git branch --unset-upstream
Miguel Ping

2
@MiguelPing的评论很重要。尝试重命名分支时,我已经推送到github,删除,重命名local,然后重新按入,导致再次使用旧名称。如果我--unset-upstream在重新推动之前就可以正常工作。
亚当·塔特尔

1
有没有一种方法可以避免自动关闭远程站点上旧名称分支上打开的PR?在gitlab中面对这一问题,在该分支中,将旧分支名称的PR推送到原点后已关闭。
Himanshu Tanwar

140

如果您错误地命名了一个分支并将其推送到远程存储库,请按照以下步骤重命名该分支(基于本文):

  1. 重命名您的本地分支:

    • 如果您在分支上,则要重命名:
      git branch -m new-name

    • 如果您在另一个分支上:
      git branch -m old-name new-name

  2. 删除old-name远程分支并推送new-name本地分支
    git push origin :old-name new-name

  3. 为新名称的本地分支重置上游分支
    切换到分支,然后:
    git push origin -u new-name


1
经过前两个步骤后,如果收到有关当前分支的错误消息,该消息指向远程仓库上的一个不存在的分支,则第三步将解决此问题
Kevin Hooke

1
@ Dr1Ku需要知道git push <remote> --delete old_namegit push origin :old-name new-name与删除分支的区别。
Ashutosh Chamoli

BitBucket用户:如果master在Repo Details中将renaming 设置为默认分支,则修复步骤2的错误。错误是:By default, deleting the current branch is denied, because the next 'git clone' won't result in any file checked out, causing confusion. You can set 'receive.denyDeleteCurrent' configuration variable to 'warn' or 'ignore' in the remote repository to allow deleting the current branch, with or without a warning message. To squelch this message, you can set it to 'refuse'. error: refusing to delete the current branch: refs/heads/master
科林

37

似乎有直接方法:

如果您确实只想远程重命名分支(而不同时重命名任何本地分支),则可以使用单个命令执行此操作,例如

git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

在Git中远程重命名分支

有关更多详细信息,请参见原始答案。


1
在git中不起作用2.20.1删除了旧分支,但未创建新分支。
Paul Razvan Berg

26

也可以通过以下方式完成。

首先,重命名本地分支,然后重命名远程分支。

重命名本地分支:

如果登录另一个分支,

git branch -m old_branch new_branch 

如果登录到同一分支,

git branch -m new_branch

重命名远程分支:

git push origin :old_branch    // Delete the remote branch

git push --set-upstream origin new_branch   // Create a new remote branch

5

如果您已经将错误的名称推送到远程,请执行以下操作:

  1. 切换到要重命名的本地分支

    git checkout <old_name>

  2. 重命名本地分支

    git branch -m <new_name>

  3. 推送<new_name>本地分支并重置上游分支

    git push origin -u <new_name>

  4. 删除<old_name>远程分支

    git push origin --delete <old_name>

这是基于本文的


4

附加一个简单代码段以重命名当前分支(本地和原始分支):

git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>

来自git docs的解释

git branch -m或-M选项将重命名为。如果具有相应的引用日志,则将其重命名为match,并创建引用日志条目以记住分支重命名。如果存在,则必须使用-M强制进行重命名。

特殊的refspec:(或+:允许非快速更新)指示Git推送“匹配”分支:对于本地存在的每个分支,如果已经存在相同名称的分支,则更新远程端在远端。

--set-upstream 设置的跟踪信息,因此被视为的上游分支。如果未指定,则默认为当前分支。


3

没有直接的方法,

  1. 重命名本地分支

    我目前的分行是master

    git branch -m master_renamed #master_renamed是主机的新名称

  2. 删除远程分支,

    git push origin --delete master #origin是remote_name

  3. 将重命名的分支推送到远程,

    git push origin master_renamed

而已...


尼斯和简单,只有3个步骤。我只能提出的改进建议是git push -u origin master_renamed将该分支设置为跟踪分支
ut9081

2

即使不通过三个简单的步骤即可重命名本地分支,也可以做到这一点:

  1. 转到GitHub中的存储库
  2. 从您要重命名的旧分支创建一个新分支
  3. 删除旧分支

0

我使用这些git别名,它几乎可以自动完成工作:

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

如果您具有默认名称(例如master,origin等),则可以使用它。您可以根据需要进行修改,但是可以为您提供想法。


0

我必须执行以下任务来重命名本地和远程分支:

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

#  Delete the old remote branch
git push origin --delete <old_name>

# push to new remote branch - creates new remote branch
git push origin <new_name>

# set new remote branch as default remote branch for local branch
git branch --set-upstream-to=origin/<new_name> <new_name>

它与现有答案有何不同?
Himanshu Tanwar

0
  1. 重命名您的本地分支。如果您在分支上,则要重命名:

    git branch -m新名称

如果您在另一个分支上:

git branch -m old-name new-name
  1. 删除旧名称的远程分支,然后推送新名称的本地分支。

    git push origin:旧名称新名称

  2. 将上游分支重置为新名称的本地分支。切换到分支,然后:

    git push origin -u新名称

搞定!


0
  • 重命名您的本地分支

如果您在分支上,则要重命名:

git branch -m new-name

如果您当前停留在其他分支上:

git branch -m old-name new-name
  • 删除旧名称的远程分支,然后推送新名称的本地分支。

停留在目标分支上并:

git push origin :old-name new-name
  • 将上游分支重置为新名称的本地分支。

切换到目标分支,然后:

git push origin -u new-name
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.