如何重命名本地 Git 分支?

git version-control git-branch

如何重命名尚未推送到远程存储库的本地分支?

有关的:

重命名本地和远程 Git 存储库的主分支

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

i
iliketocode

在指向任何分支时重命名分支:

git branch -m <oldname> <newname>

重命名当前分支:

git branch -m <newname>

推送本地分支并重置上游分支:

git push origin -u <newname>

要删除远程分支:

git push origin --delete <oldname>

记住这一点的一种方法是 -m 用于“移动”(或 mv),这是您重命名文件的方式。添加别名也可能有所帮助。为此,请运行以下命令:

git config --global alias.rename 'branch -m'

如果你在 Windows 或其他不区分大小写的文件系统上,并且名称只有大小写变化,则需要使用 -M,否则,Git 会抛出 branch already exists 错误:

git branch -M <newname>

@PandaWood:推送时会添加新分支,但不会删除旧分支。如果您使用 git push -f --mirror,那么它将重命名远程上的分支,但您应该仅在远程只是作为当前存储库的副本时使用此方法。另请参阅此问题:stackoverflow.com/questions/1526794/git-rename-remote-branch

@PandaWood,这取决于 push.default 的配置方式。默认情况下 (matching) 它将推送到名称匹配的远程。您必须执行 git push origin <newname>:<oldname> 否则您将创建一个新的远程分支。但是,如果 push.default 设置为 upstream,那么您可以 push origin head 并且事情将转到遥控器上的旧名称。

-m 选项的长名称是 --move,例如,git branch --move master 将当前分支重命名为“master”。

有趣的是,重命名似乎暂时不区分大小写,即使在 OSX 上也是如此。从 FB12.show_hide_cols 开始,-m fb12.show_hide_cols 给我一个现有的分支错误。但是 -m fb12.show_hide_col,然后 -m fb12.show_hide_cols 将我带到了我想要的地方。之后, git branch 只显示一个重命名的分支,就像我想要的那样。

完成此操作后,您还应该运行 git push origin :<old_name> <new_name> 来更新您的远程分支名称。

N
Nick Matteo
git branch -m old_branch_name new_branch_name

上面的命令会改变你的分支名称,但是你必须非常小心地使用重命名的分支,因为它仍然会引用与之关联的旧上游分支(如果有的话)。

如果您想在本地分支重命名为 new_branch_name(示例名称)后将一些更改推送到 master:

git push origin new_branch_name:master(现在更改将转到主分支,但您的本地分支名称是 new_branch_name)

有关详细信息,请参阅“How to rename your local branch name in Git”。

J
Jonathan

要重命名当前分支:

git branch -m <newname>

如果您只是更改大小写,则需要使用 -M 重命名,因为 git 会告诉您该分支已经存在。

然后git push origin HEAD:<oldname>

P
Peter Mortensen

以下是重命名分支的步骤:

切换到需要重命名的分支 git branch -m git push origin : git push origin :refs/heads/

编辑 (12/01/2017): 确保运行命令 git status 并检查新创建的分支是否指向它自己的 ref 而不是旧的。如果您找到对旧分支的引用,则需要使用以下命令取消设置上游:

git branch --unset-upstream

解释这些步骤:1 = 切换到分支本地,2 = 'move' 即'rename' 本地分支(-m),3 = 将'nothing' 推送到远程的旧分支目标(即删除对远程分支的引用) - 冒号左侧是“源”,右侧是“目标”,4 = 将引用(指针)推送到新分支,到远程

@Milind Anantwar,“检查新分支是否指向它自己的参考”是什么意思?您能否解释一下 git branch --unset-upstream 如何解决您所指的不同步条件?

P
Peter Mortensen

分支完成后,重命名分支将很有用。然后新的东西来了,你想在同一个分支中开发而不是删除它并创建新的。

根据我的经验,要在 Git 中重命名本地和远程分支,您应该执行以下步骤。

从多个状态引用 - 在 git 中重命名本地和远程分支

1.重命名您的本地分支

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

git branch -m new-name

如果您在不同的分支上:

git branch -m old-name new-name

2.删除旧的远程分支,推送新的本地分支

git push origin :old-name new-name

3.为新名称本地分支重置上游分支

git push origin -u new-name

This one 对我来说效果更好。这里的 2 个步骤给了我以下错误:error: dst ref refs/heads/<old-name> receives from more than one src.; error: failed to push some refs to 'git@uri:foo/bar.git'

您在运行命令 git push origin :old-name new-name 时遇到了问题,对吗?

m
mskfisher

到目前为止的答案是正确的,但这里有一些额外的信息:

可以使用“-m”(移动)安全地重命名分支,但必须小心使用“-M”,因为它会强制重命名,即使已经存在同名的分支。以下是“git-branch”手册页的摘录:

使用 -m 或 -M 选项, 将被重命名为 。如果 有相应的 reflog,则将其重命名以匹配 ,并创建一个 reflog 条目以记住分支重命名。如果 存在,则必须使用 -M 来强制进行重命名。

它被新名称/分支覆盖。例如,如果您在 git 中有以下分支: master b1 <-- 在执行 'git branch -M b2' 之后,您将只有当前分支 b2:master b2 <-- 当前分支 b1 将消失,如果您愿意恢复它你应该通过它的哈希来检查它。您可以通过输入“git reflog”来查看它。干杯。

如果您只是更正分支名称的大小写,例如将 myBranch 更改为 MyBranch-M 标志对于强制重命名也很有用。 (使用 -m,git 返回 fatal: A branch named 'MyBranch' already exists.

p
pkamb

1.重命名

如果它是您当前的分支,请执行

git branch -m new_name

如果它是您要重命名的另一个分支

git branch -m old_name new_name

2. 跟踪一个新的远程分支

如果你的分支被推送,那么在重命名后你需要从远程 Git 存储库中删除它并要求你的新本地跟踪一个新的远程分支:

git push origin :old_name
git push --set-upstream origin new_name
S
Samuel Meacham

我愚蠢地命名了一个以连字符开头的分支,然后签出了master。我不想删除我的分支,我在里面工作。

这些都不起作用:

git checkout -dumb-name

git checkout -- -dumb-name

"s、's 和 \s 也没有帮助。 git branch -m 不起作用。

这是我最终修复它的方法。进入工作副本的 .git/refs/heads,找到文件名“-dumb-name”,获取分支的哈希值。然后这将检查它,使用合理的名称创建一个新分支,然后删除旧分支。

git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name

同上。如果您必须深入研究目录结构才能做到这一点,请一路执行 'mv -- -dumb-name bright-name' 执行 'git branch -av' 你会看到一个目录结构.git/refs。或者也许 'grep -R ^ .git/refs' 可以直接查看哈希值。

老实说,如果那是您想要采取的路线,我会避免(如果您不知道自己在做什么,IMO 会令人困惑并且可能很危险)首先通过 .git 目录进行短途旅行,并且只需使用一些带有一些“git log”解析的普通命令(使用适当的标志来显示分支,并找出您要从中签出新分支的 shasum),然后执行此操作。然后,删除这个名字古怪的分支。我鄙视 git 坚持认为您需要了解其所有内部工作原理才能做一些事情,但非常感谢您可以做这些事情。

在 2.10.1+ 中创建一个名字不好的分支更难。如果你以某种方式这样做,你可以使用 git branch -v 来获取你的分支的短哈希版本(添加 -r 用于远程)。然后,如果需要,您可以使用 git rev-parse 来获取完整的哈希值。

您也可以使用 git show-ref 这将为您提供本地存储库中所有内容的长哈希。我的意思是一切……分支/藏匿处/标签……等等

当您不能checkout该名称但可以删除它时,我会认为它是 git 中的错误。

H
Hari_pb

只需三个步骤即可在 remote 和 GitHub 上复制名称更改:

步骤 1 git branch -m old_branchname new_branchname

第 2 步 git push origin :old_branchname new_branchname

步骤 3 git push --set-upstream origin new_branchname

我还必须做一件额外的事情:@Nomade 回答中提到的 git push --set-upstream origin new_branchname

@Dev 并非在所有情况下 Dev,我最近不得不更新,因为使用了 bitbucket 和 codecommit,第 3 步是必要的

a
aliasav

要在本地重命名分支:

git branch -m [old-branch] [new-branch]

现在,您还必须在远程服务器上传播这些更改。

推送已删除旧分支的更改:

git push origin :[old-branch]

推送创建新分支的更改:

git push origin [new-branch]
a
auspicious99

试图具体回答问题(至少是标题)。

您也可以重命名本地分支,但继续跟踪远程上的旧名称。

git branch -m old_branch new_branch
git push --set-upstream origin new_branch:old_branch

现在,当您运行 git push 时,远程 old_branch 引用将更新为您的本地 new_branch

您必须了解并记住此配置。但是,如果您无法选择远程分支名称,但您不喜欢它(哦,我的意思是,您有充分的理由不喜欢它!)并且更喜欢更清晰的名称,它会很有用您当地分支机构的名称。

使用 fetch 配置,您甚至可以重命名本地远程引用。即,有一个指向分支的refs/remote/origin/new_branch ref 指针,实际上就是origin 上的old_branch。但是,为了您的安全,我强烈反对这种做法。

S
S. Hesam

2022 年更新

在我们开始之前,请确保您已选择要重命名的分支:

git checkout old-name

如果要查看所有本地分支,请使用以下命令:

git branch --list

一切都清楚后,请按照下列步骤操作:

使用 Git rename branch 命令将需要您在命令中添加 -m 选项: git branch -m new-name 您还可以使用以下两个命令从另一个分支重命名本地分支: git checkout master git branch -m old-name new-name 最后,此命令将列出所有(本地和远程)分支以验证它是否已重命名: git branch -a

虽然无法直接重命名远程分支,但重命名过程涉及以下两个简单步骤:

首先,您需要按照前面的步骤重命名本地分支。 2.然后删除旧分支并推送新分支。您可以使用以下命令轻松完成此操作: git push origin :old-name new-name 为您的新本地分支重置上游分支,您将全部设置好: git push origin -u new-name

P
Peter Mortensen

使用以下命令重命名分支:

git branch -m [old_branch_name] [new_branch_name]

-m:它重命名/移动分支。如果已经有一个分支,你会得到一个错误。

如果已经有一个分支并且您想使用该分支重命名,请使用:

 git rename -M [old_branch_name] [new_branch_name]

有关帮助的更多信息,请在终端中使用此命令:

git branch --help

或者

man git branch
C
Constant

高级 Git 用户可以使用以下命令手动重命名:

Rename the old branch under .git/refs/heads to the new name

Rename the old branch under .git/logs/refs/heads to the new name

Update the .git/HEAD to point to yout new branch name

是否有特定原因直接处理文件而不是使用相应的命令?

M
Major

重命名您的本地分支。

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

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

或者为了快速做到这一点,您可以使用以下 3 个步骤:

# 本地重命名分支

git branch -m old_branch new_branch  

# 删除旧的远程分支

git push origin :old_branch  

推送新分支,设置本地分支跟踪新远程

git push --set-upstream origin new_branch   

参考:https://www.w3docs.com/snippets/git/how-to-rename-git-local-and-remote-branches.html

P
Peter Mortensen

以下是三个步骤: 您可以在终端中调用并更改分支名称的命令。

git branch -m old_branch new_branch         # Rename branch locally
git push origin :old_branch                 # Delete the old branch
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

如果您需要更多:一步一步,How To Change Git Branch Name 是一篇很好的文章。

可能应该编辑现有答案(例如 stackoverflow.com/a/37320788/6607497)。有很多答案说 95% 相同(这可能会让人很困惑)。

P
Peter Mortensen

可能正如其他人所提到的,这将是分支命名中的大小写不匹配。

如果您遇到这种情况,我猜您使用的是 Windows,这也会导致您:

$ git branch -m CaseSensitive casesensitive
fatal: A branch named 'casesensitive' already exists.

然后你必须做一个中间步骤:

$ git branch -m temporary
$ git branch -m casesensitive

而已。

请注意,这种情况也可能出现在 Mac 上,它的文件系统也(非常烦人)不区分大小写。

或者,您可以使用 -M 而不是 -m 在一个步骤中执行这种“套管修复”重命名。

P
Peter Mortensen

在本地更改分支非常容易......

如果您在要更改名称的分支上,只需执行以下操作:

git branch -m my_new_branch

否则,如果您在 master任何其他分支,而不是您想要更改名称的分支,只需执行以下操作:

git branch -m my_old_branch my_new_branch

另外,我创建了下面的图像以在 命令行 上显示此操作。在这种情况下,您位于 master 分支上,例如:

https://i.stack.imgur.com/9ARzs.jpg

P
Peter Mortensen

要重命名当前分支(分离的 HEAD 状态除外),您还可以使用此别名:

[alias]
    mvh = !sh -c 'git branch -m `git rev-parse --abbrev-ref HEAD` $1'
t
tagurit

由于您不想将分支推送到远程服务器,因此此示例将很有用:

假设您有一个名为“my-hot-feature”的现有分支,并且您想将其重命名为“feature-15”。

首先,您要更改本地分支。这再简单不过了:

git branch -m my-hot-feature feature-15

如需更多信息,您可以访问 Locally and Remotely Renaming a Branch in Git

P
Pang

如果您愿意使用 SourceTree(我强烈推荐),您可以右键单击您的分支并选择“重命名”。

https://i.stack.imgur.com/6GuAJ.png

P
Peter Mortensen

另一种选择是根本不使用命令行。 Git GUI 客户端(例如 SourceTree)消除了大部分语法学习曲线/痛苦,导致此类问题成为 Stack Overflow 上最受欢迎的问题之一。

在 SourceTree 中,右键单击左侧“分支”窗格中的任何本地分支,然后选择“重命名...”。

我不会称之为痛苦。 git 命令非常好用,一旦你看到这个答案,你可能再也不会回来了。问题更多的是,看起来 git 命令行的文档不够直观。

没错,但使用 SourceTree,我几乎不需要担心检查文档。一切通常都很直观 - 只需右键单击并查看选项是什么。 (顺便说一句,我与他们没有任何关系——就像这个工具一样!)

P
Peter Mortensen

一个简单的方法:

git branch -m old_branch new_branch         # Rename branch locally
git push origin :old_branch                 # Delete the old branch
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

有关详细信息,请参阅 this

L
Loop_Assembly

将当前分支重命名为新分支名称

git branch -m <new_name>

这将为您正在使用的当前分支设置新名称。

重命名另一个分支

git branch -m <old_name> <new_name>

在这里,您必须提供旧分支名称和新分支名称。

P
Peter Mortensen

Git 版本 2.9.2

如果您想更改您所在的本地分支的名称:

git branch -m new_name

如果要更改不同分支的名称:

git branch -m old_name new_name

如果要将不同分支的名称更改为已存在的名称:

git branch -M old_name new_name_that_already_exists

注意:最后一个命令是破坏性的,并且会重命名您的分支,但是您将丢失具有该名称的旧分支和那些提交,因为分支名称必须是唯一的。

U
U. Windl

当地分公司

首先从要更新名称的分支更改当前分支。例如我有 3 个分支: branch1 , branch2 , branch3

检查当前分支:

git branch --show-current

输出可能是:branch1

接下来,您可以更新 branch2 和 branch3 的名称,但不能更新当前名称:

git branch -m old_branchname new_branchname

远程分支

只需三个步骤即可在远程和远程上复制名称更改:

git branch -m old_branchname new_branchname
git push origin :old_branchname new_branchname
git push --set-upstream origin new_branchname

答案应由作者编辑以使分支名称保持一致:“branch1,branch2,branch3”与“old_branchname,new_branchname”。

2
2Toad

如果要更改当前分支的名称,请运行:

git branch -m [old_branch] [new_branch]

如果要删除旧的远程分支,请运行:

git push origin :[old_branch]

如果要删除旧的远程分支并创建一个新的远程分支,请运行:

git push origin :old_branch new_branch
A
AmerllicA

实际上你有三个步骤,因为本地分支在服务器上有一个副本,所以我们在服务器上的两个步骤中有一个本地步骤:

重命名本地:只需使用以下命令重命名当前分支,即使您已将其签出: git branch -m 删除服务器一:使用以下命令删除服务器上的旧名称分支: git push : 推送新分支:现在是时候推送服务器上命名的新分支了: git push -u <新分支名称>

在我的情况下,第三个命令正在重命名远程分支,而不执行第二个命令。重命名远程分支之前是否需要删除?

@SP007,第二个命令不是必需的,但我有点担心 git 服务器的清晰度。所以我不会保留无用的分支。

P
Peter Mortensen

Git 分支重命名可以使用:

git branch -m oldBranch newBranch git branch -M oldBranch ExistingBranch

-m 和 -M 的区别:

-m:如果您尝试使用 -m 使用现有分支名称重命名您的分支。它将引发一个错误,指出该分支已经存在。您需要提供唯一的名称。

但,

-M:这将帮助您强制使用给定名称重命名,即使它存在。所以现有的分支将完全覆盖它......

这是一个 Git 终端示例,

mohideen@dev:~/project/myapp/sunithamakeup$ git branch
  master
  master0
  new_master
  test
* test1
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -m test1 test
fatal: A branch named 'test' already exists.
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -M test1 test
mohideen@dev:~/project/myapp/sunithamakeup$ git branch
  master
  master0
  new_master
* test
mohideen@dev:~/project/myapp/sunithamakeup$
D
Dai Kaixian

之前的所有答案都在谈论git branch -m。当然,它很容易操作,但对我来说,记住另一个 Git 命令可能有点困难。所以我试着用我熟悉的命令来完成工作。是的,你可能猜到了。

我使用 git branch -b <new_branch_name>。如果您现在不想保存旧分支,可以执行 git branch -D <old_branch_name> 将其删除。

我知道这可能有点乏味,但更容易理解和记住。我希望它对你有帮助。