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

How do I rename both a Git local and remote branch name?

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

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

我试试下面的命令:

git remote rename regacy legacy

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

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

我该如何解决这个问题?


有几种方法可以实现:

  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>

# 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 remote
git push <remote> <new_name>

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


仅重命名远程分支

来源:

# 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 正在尝试更新配置文件中的远程部分。它会将具有给定名称的遥控器重命名为新名称,但在您的情况下,它没有找到任何名称,因此重命名失败。

但是它不会像你想的那样;它将重命名您的 local 配置远程名称和 not 远程分支。


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

好像有直接的方法:

If you really just want to rename branches remotely (without renaming any local branches at the same time) you can do this with a single command like

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

Renaming branches remotely in Git

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

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

  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. 重命名本地分支,

    我当前的分支是master

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

  2. 删除远程分支,

    git push origin --delete master #origin is 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. 从要重命名的旧分支创建新分支
  4. 删除旧分支

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

git config --global alias.move '!git checkout master; git branch -m  ; git status; git push --delete origin ; git status; git push -u origin ; git branch -a; exit;'

Usage: git move FROM_BRANCH TO_BRANCH

如果您有默认名称(如 master、origin 等),它会起作用。 你可以随意修改,但它给了你想法。

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

# 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>
  1. 重命名您的本地分支。 如果您在要重命名的分支上:

    git branch -m new-name

如果您在不同的分支:

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

    git push origin :old-name new-name

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

    git push origin -u new-name

一切就绪!

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

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

解释 来自 git 文档:

git branch -m or -M option, will be renamed to . If had a corresponding reflog, it is renamed to match , and a reflog entry is created to remember the branch renaming. If exists, -M must be used to force the rename to happen.

The special refspec : (or +: to allow non-fast-forward updates) directs Git to push "matching" branches: for every branch that exists on the local side, the remote side is updated if a branch of the same name already exists on the remote side.

--set-upstream Set up 's tracking information so is considered 's upstream branch. If no is specified, then it defaults to the current branch.

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

  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>

这是基于 this article

  • 重命名您的本地分支机构

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

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 中的一个文件夹,其中包含 this :

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

newBranch=""; shift
git branch -m "$newBranch" && \
git push origin :"$currentBranch" "$newBranch"

另一种解决方法如下:

  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>

检查您使用的是哪个分支下面的命令

git branch -a 

结帐到您要重命名的分支

git checkout branch_to_rename

使用

重命名分支
git branch -m new_name

推送更改

git push origin :old_name new_name