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

我有一个本地分支master指向远程分支origin/regacy(哎呀,错别字!)。

如何将远程分支重命名为origin/legacyorigin/master


我试过:

git remote rename regacy legacy

但这给出了一个错误:

错误:无法将配置部分“remote.regacy”重命名为“remote.legacy”

752002 次浏览

原理图,可爱的git远程图


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

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

重命名本地和远程

# Rename the local branch to the new namegit branch -m <old_name> <new_name>
# Delete the old branch on remote - where <remote> is, for example, origingit push <remote> --delete <old_name>
# Or shorter way to delete remote branch [:]git push <remote> :<old_name>
# Prevent git from using the old name when pushing in the next step.# Otherwise, git will use the old upstream name instead of <new_name>.git branch --unset-upstream <new_name>
# Push the new branch to remotegit push <remote> <new_name>
# Reset the upstream branch for the new_name local branchgit push <remote> -u <new_name>

控制台截图


仅重命名远程分支

图片来源:ptims

# In this option, we will push the branch to the remote with the new name# While keeping the local name as isgit 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中,所有工作都是在本地完成的,因此建议使用上述命令进行工作。

似乎有一个直接的方法:

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

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

在Git中远程重命名分支

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

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

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

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

    • 如果您在不同的分支上:
      git branch -m old-name new-name

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

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

没有直接的方法,

  1. 重命名本地分支

    我目前的分支是大师

    git branch -m master_renamed#master_renamed是主人的新名字

  2. 删除远程分支,

    git push origin --delete master#起源remote_name

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

    git push origin master_renamed

就是这样…

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

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

重命名本地分支:

如果登录到另一个分支,

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

即使不重命名本地分支,也可以通过三个简单的步骤完成:

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

我使用这些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移动FROM_BRANCHTO_BRANCH

如果你有默认的名字,比如master,起源等,它就会起作用。你可以随心所欲地修改,但它给你的想法。

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

# Rename the local branch to the new namegit branch -m <old_name> <new_name>
#  Delete the old remote branchgit push origin --delete <old_name>
# push to new remote branch - creates new remote branchgit push origin <new_name>
# set new remote branch as default remote branch for local branchgit branch --set-upstream-to=origin/<new_name> <new_name>

附加一个简单的片段来重命名当前分支(本地和原点):

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

补充说明来自git docs:

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

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

--设置-上游将跟踪信息设置为上游分支。如果指定否,则默认为当前分支。

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

  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>

这是基于这篇文章

  • 重命名您的本地分支

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

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

如果你想使用单个命令重命名当前分支,像这样:

git rename my-new-branch-name

然后,您必须创建一个名为git-rename的文件,使其可执行(chmod +x git-rename)并将其保存到$PATH中的一个文件夹中,其中包含这个

#!/bin/shcurrentBranch="$(git rev-parse --abbrev-ref HEAD)"test $# != 1 && cat <<EOF && exit 1Renames the current branch ($currentBranch) both locally and remotely.USAGE:git rename <new branch name>EOF
newBranch="$1"; shiftgit branch -m "$newBranch" && \git push origin :"$currentBranch" "$newBranch"

另一个解决方法如下:

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

更具体地说:

# Checkout to the branch you want to renamegit checkout <old_branch_name>
# Create a new branch from the old one and checkout to itgit checkout -b <new_branch_name>
# Push the new branch to remotegit push -u <origin> HEAD
# Delete local branchgit branch -d <old_branch_name>
# Delete remote branchgit push <origin> -d <old_branch_name>

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

git branch -a

签出到要重命名的分支

git checkout branch_to_rename

使用重命名分支

git branch -m new_name

推动变革

git push origin :old_name new_name

除了其他人提出的其他步骤,记住

如果您尝试删除default分支,例如master,您将在运行git push origin :<branch_name>时收到此错误

! [remote rejected] master (refusing to delete the current branch: refs/heads/<branch_name>) error: failed to push some refs to '<repo_name>'

a)在删除分支之前更改default(Github示例)

  1. 去你的仓库。
  2. 点击“设置”
  3. 更改default分支,如下图所示:

输入图片描述

b)然后删除[目标]远程:

$ git push origin :master

仅重命名远程分支:

(set -ex; old=oldname; new=newname; git push origin origin/$old:refs/heads/$new :$old)

或:

git-rr() (set -ex; old=$1; new=$2; git push origin origin/$old:refs/heads/$new :$old)
git-rr oldname newname