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

Jay*_*ayD 329 git rename repository git-branch

我有4个像主人一样的分支 - > origin/regacy,FeatureA - > origin/FeatureA.
如上所示,我键入了错误的名称.

所以我想重命名一个远程分支名称(origin/regacy => origin/legacy或origin/master)

我试着在下面命令:

git remote rename regacy legacy
Run Code Online (Sandbox Code Playgroud)

但是git console向我返回了错误消息.

 error : Could not rename config section 'remote.regacy' to 'remote.legacy'
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

Cod*_*ard 611

在此输入图像描述


您无法直接重命名远程分支.
您必须删除它,然后重新推送它.

重命名分支

# 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>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


重要的提示 :

当您使用git branch -m(移动)时,git也会使用新名称更新您的跟踪分支.

git remote rename legacy legacy

git remote rename正在尝试更新配置文件中的远程部分.它会将具有给定名称的远程重命名为新名称,但在您的情况下,它没有找到任何名称,因此重命名失败.

它不会按照您的想法执行,它会重命名您的本地配置远程名称而不是远程分支. 


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

  • 这是一个单命令版本:`OLD=&lt;old&gt;; 新=&lt;新&gt;; 远程=&lt;远程&gt;;git 分支 -m $OLD $NEW &amp;&amp; git Push $REMOTE --delete $OLD &amp;&amp; git Push $REMOTE $NEW &amp;&amp; git Push $REMOTE -u $NEW` (4认同)
  • @JimArcher 是的,因为您需要使用新名称而不是旧名称。我改了,但是原作者又改回来了,没有任何解释。 (4认同)
  • 别忘了取消旧的上游:`git checkout <new_name>; git branch --unset-upstream` (3认同)
  • @MiguelPing 的评论很重要。当我尝试重命名一个分支时,我已经推送到 github,删除,重命名本地,它并重新推送导致再次使用旧名称。如果我在重新推送之前`--unset-upstream`,它会按预期工作。 (3认同)
  • 有没有办法避免自动关闭远程旧名称分支上打开的 PR?在gitlab中遇到了这个问题,旧分支名称上的PR在推送到原点后被关闭。 (2认同)
  • 也许您可以删除最后一个命令“git push &lt;remote&gt; &lt;new_name&gt;”,因为它包含在最后一个“git push &lt;remote&gt; -u &lt;new_name&gt;”中。 (2认同)

小智 174

检查您正在使用以下命令的分支

git branch -a 
Run Code Online (Sandbox Code Playgroud)

签出您要重命名的分支

git checkout branch_to_rename
Run Code Online (Sandbox Code Playgroud)

使用重命名分支

git branch -m new_name
Run Code Online (Sandbox Code Playgroud)

推动更改

git push origin :old_name new_name
Run Code Online (Sandbox Code Playgroud)

  • @Nomnom 确实如此 (3认同)
  • 这会删除远程上的旧分支吗? (2认同)

小智 94

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

  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

  • 其中最简单的一个 (6认同)
  • 在前 2 个步骤之后,如果您收到有关当前分支指向远程存储库上不存在的分支的错误消息,则第 3 步将修复此问题 (3认同)
  • @Dr1Ku 需要知道`git push &lt;remote&gt; --delete old_name` 和`git push origin :old-name new-name` 之间的区别来删除一个分支。 (3认同)
  • BitBucket 用户:如果重命名“master”,请修复第 2 步中的错误,在“Repo 详细信息”中将默认分支设置为新分支。错误是:默认情况下,删除当前分支被拒绝,因为下一个“git克隆”不会导致检出任何文件,从而导致混乱。您可以在远程存储库中将“receive.denyDeleteCurrent”配置变量设置为“warn”或“ignore”,以允许删除当前分支,无论是否有警告消息。要抑制此消息,您可以将其设置为“拒绝”。错误:拒绝删除当前分支:refs/heads/master` (2认同)
  • 对于 Github 和 Bitbucket 用户,当您运行步骤 2 时,它将创建新的远程分支,但您将看到来自远程的有关“拒绝删除当前分支”的错误。因此,只需转到存储库设置 ➔ 分支 ➔ **更改默认/主分支** ➔ new_branch_name ➔ 保存。然后再次运行步骤 2,以便删除旧的远程分支名称。 (2认同)

Vit*_*hyn 43

  • 重命名您的本地分支

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

git branch -m new-name
Run Code Online (Sandbox Code Playgroud)

如果您当前留在不同的分支:

git branch -m old-name new-name
Run Code Online (Sandbox Code Playgroud)
  • 删除旧名称远程分支并推送新名称本地分支。

留在目标分支上并:

git push origin :old-name new-name
Run Code Online (Sandbox Code Playgroud)
  • 重置新名称本地分支的上游分支。

切换到目标分支,然后:

git push origin -u new-name
Run Code Online (Sandbox Code Playgroud)

  • 您的解决方案简单明了。感谢@Vitaliy Andrusishyn 分享您的知识。 (3认同)
  • 在输入 git push origin :old-name new-name 命令之前,请确保您的默认远程分支未设置为您要重命名和删除的当前分支 (3认同)
  • `git push origin :old-name new-name` 关闭了我的公开 PR。如果您的 PR 中正在进行持续的讨论,请务必小心。 (2认同)

loo*_*bly 41

重命名本地分支

 git branch -m <old_name> <new_name>
Run Code Online (Sandbox Code Playgroud)

将您的本地分支重命名masterlegacy

git branch -m master legacy
Run Code Online (Sandbox Code Playgroud)

重命名远程分支

  • 删除旧名称的远程分支。
  • 将具有新名称的本地分支推送到远程存储库。
git push origin :regacy

git push origin legacy
Run Code Online (Sandbox Code Playgroud)
  • git push origin :regacy删除名为 的远程分支regacy
  • git push origin legacy将名为 Legacy 的本地分支推送到远程存储库,并创建一个名为 的新远程分支legacy


pti*_*tim 29

似乎有一种直接的方式:

如果你真的只想远程重命名分支(不同时重命名任何本地分支),你可以用一个命令来完成

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

/sf/answers/1491173211/

有关详细信息,请参阅原始答案


Bay*_*bir 28

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

\n
    \n
  1. 首先切换到要重命名的本地分支:

    \n

    git checkout <旧名称>

    \n
  2. \n
  3. 通过键入以下内容重命名本地分支:

    \n

    git 分支 -m <新名称>

    \n
  4. \n
  5. 至此,您已经重命名了本地分支。如果您\xe2\x80\x99 已将 <old_name> 分支推送到远程存储库,请执行以下步骤来重命名远程分支。

    \n

    git push origin -u <新名称>

    \n
  6. \n
  7. 删除 <old_name> 远程分支:

    \n

    git push origin --delete <旧名称>

    \n
  8. \n
\n

\xe2\x9c\x85 就是\xe2\x80\x99。您已成功重命名本地和远程 Git 分支。

\n


小智 21

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

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

重命名本地分支:

如果登录另一个分支,

git branch -m old_branch new_branch 
Run Code Online (Sandbox Code Playgroud)

如果登录到同一分支,

git branch -m new_branch
Run Code Online (Sandbox Code Playgroud)

重命名远程分支:

git push origin :old_branch    // Delete the remote branch

git push --set-upstream origin new_branch   // Create a new remote branch
Run Code Online (Sandbox Code Playgroud)


avi*_*amg 14

附加一个简单的代码片段来重命名当前分支(本地和源头):

git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>
Run Code Online (Sandbox Code Playgroud)

来自 git 文档的解释

git branch -m或 -M 选项,将重命名为 . 如果有相应的 reflog,则将其重命名为 match,并创建一个 reflog 条目以记住分支重命名。如果存在,必须使用 -M 来强制重命名发生。

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

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


mil*_*eow 14

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

  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>

这是基于这篇文章


Moh*_*med 6

没有直接的方法,

  1. 重命名本地分支

    我当前的分支是master

    git branch -m master_renamed #master_renamed是master的新名称

  2. 删除远程分支,

    git push origin --delete master #origin 是remote_name

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

    git push origin master_renamed

就是这样...


vch*_*han 6

另一个解决方法如下:

  1. 结帐到您要更改的分行
  2. 从中创建一个新分支
  3. 将上游设置为远程
  4. 从本地和远程删除旧分支

进一步来说:

# Checkout to the branch you want to rename
git checkout <old_branch_name>

# Create a new branch from the old one and checkout to it
git checkout -b <new_branch_name>

# Push the new branch to remote
git push -u <origin> HEAD

# Delete local branch
git branch -d <old_branch_name>

# Delete remote branch
git push <origin> -d <old_branch_name>
Run Code Online (Sandbox Code Playgroud)


Vin*_*oso 5

Git 重命名你的分支

重命名本地分支

  • 当前分行:git branch -m new-name
  • 不同分行:git branch -m old-name new-name

更新远程分支

  • git push -d origin old-name

设置新上游

  • git push origin -u new-name