如何重命名本地Git分支?


Answers:


13725

如果要在指向任何分支时重命名分支,请执行以下操作:

git branch -m <oldname> <newname>

如果要重命名当前分支,可以执行以下操作:

git branch -m <newname>

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

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

如果您使用的是Windows或其他不区分大小写的文件系统,并且名称中只有大小写更改,则需要使用-M,否则git会抛出分支已经存在的错误:

git branch -M <newname>

86
我真正想知道的是,这是否会在/如果您按下按钮将影响远程分支
PandaWood 2012年

181
@PandaWood:当您按下时它将添加新分支,但不会删除旧分支。如果使用git push -f --mirror,则它将重命名远程服务器上的分支,但是仅当远程服务器只是要将其作为当前存储库的副本时,才应使用此方法。另请参阅以下问题:stackoverflow.com/questions/1526794/git-rename-remote-branch
siride 2012年

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

13
@ NightOwl888:-m可能是“ move”的缩写,遵循Unix约定使用mv重命名文件。原因是在基于目录的inode文件系统中进行移动和重命名是完全等效的。
siride

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

445
git branch -m old_branch_name new_branch_name

上面的命令将更改您的分支名称,但是使用重命名的分支必须非常小心,因为它仍将引用与其关联的旧的上游分支(如果有)。

如果要在将本地分支重命名为new_branch_name(示例名称)后将一些更改推送到master,请执行以下操作:

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

有关更多详细信息,请参见“ 如何在Git中重命名本地分支名称 ”。


326

重命名当前分支:

git branch -m <newname>

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

288

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

  1. 切换到需要重命名的分支
  2. git branch -m <new_name>
  3. git push origin :<old_name>
  4. git push origin <new_name>:refs/heads/<new_name>

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

git branch --unset-upstream

1
在哪个步骤中可以取消上游?在第4步之前?
Cyclonecode '18

1
这是最好的答案,因为它描述了正确完成重命名的完整过程
Chris Halcrow,

212

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

根据我的经验,要在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

1
对我来说效果更好。这里的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'
Anto

1
您在运行命令时遇到问题了git push origin :old-name new-name吗?
trungk18 '18

是的(对不起,我的意思是“第二步”,不是“两步”-累了)
Anto

116

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

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

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


2
被覆盖的分支会怎样?
Kevin Dice

它会被新名称/分支覆盖。例如,如果您在git中具有以下分支:master b1 <-当前分支b2执行'git branch -M b2'之后,您将只有:master b2 <-当前分支b1将消失,并且如果您希望恢复它,您应该通过其哈希将其检出。您可以通过键入“ git reflog”来查看它。干杯。
Vanchev 2015年

-M如果您只是在更正分支名称的大小写(例如,更改myBranch为),则该标志还可用于强制重命名MyBranch。(使用-m,git返回fatal: A branch named 'MyBranch' already exists.
乔恩·施耐德

92

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

74

我愚蠢地命名了一个以连字符开头的分支,然后签出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

8
您难道不只是在refs / heads中重命名了文件吗?
android.weasel 2013年

同上。如果您必须深入研究目录结构才能做到这一点,那么请继续执行“ mv--dumb-name brilliant-name”。执行“ git branch -av”,您将看到目录结构.git / refs。或者也许是'grep -R ^ .git / refs'直接查看哈希值。
戴夫X

2
您可能已经使用过reflog
Code Whisperer

老实说,如果这是您要采用的方法,那么我首先要避免通过.git目录(如果您不知道自己在做什么,则会造成IMO混乱和潜在危险)的困扰,而只需执行一些操作即可常规命令,并进行一些“ git log”解析(使用适当的标志显示分支,并找出要从中检出新分支的shasum),然后执行此操作。然后,删除名称不正确的分支。我鄙视 git坚持认为您需要了解它的所有内部功能才能执行某些操作,但是非常感谢您可以执行这些操作。
乔恩五世

在2.10.1及更高版本中创建带有错误名称的分支比较困难。如果您以某种方式执行此操作,则可以使用git branch -v获取分支的短哈希版本(添加-r表示远程)。然后,您可以根据需要使用git rev-parse <shorthash>获取完整的哈希。
德克斯特府

67

要在本地重命名分支:

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

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

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

git push origin :[old-branch]

推动创建新分支的更改:

git push origin [new-branch]

57

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

步骤1 git branch -m old_branchname new_branchname

第2步 git push origin :old_branchname new_branchname

第三步 git push --set-upstream origin new_branchname


2
我还必须做一件事:git push --set-upstream origin new_branchname@Nomade答案中提到
IbrahimShendy

2
不需要步骤3。一切都跟上时代的第2步后
开发

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

40

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

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

40

高级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

34
  1. 重命名您的本地分支。

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

git branch -m new-name

如果您在另一个分支上:

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

git push origin :old-name new-name

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

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


这对我
有用

26

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

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

如果您需要更多:循序渐进,《如何更改Git分支名称》是一篇不错的文章。


25

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

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

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

然后,您必须执行一个中间步骤:

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

而已。


1
请注意,在Mac上也可能会出现这种情况,在Mac上,其文件系统也不区分大小写(非常令人讨厌)。
乔恩五世

或者,您可以使用-M而不是-m在单个步骤中进行这种“套管修复”重命名。
乔恩·施耐德

23

尝试专门回答问题(至少标题)。

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

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

现在,当您运行时git push,远程old_branch引用将使用local更新new_branch

您必须知道并记住此配置。但是,如果您没有选择远程分支名称,但又不喜欢它的话,它会很有用(哦,我的意思是,您有充分的理由不喜欢它!),并且希望使用一个更清晰的名称您当地分支机构的名称。

使用获取配置,您甚至可以重命名本地远程引用。即,具有refs/remote/origin/new_branch指向分支的ref指针,实际上是old_branchon origin。但是,出于您的安全考虑,我强烈不建议这样做。


22

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

如果您要更改其名称,只需执行以下操作:

git branch -m my_new_branch

否则,如果您要更改名称,但如果您位于master其他分支上,只需执行以下操作:

git branch -m my_old_branch my_new_branch

另外,我还创建了下面的图像,以在命令行上显示该图像。在这种情况下,您处于master分支机构,例如:

在本地更改分支名称



20

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

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

18

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

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


5
我不会叫它痛苦。git命令非常易于使用,一旦您看到了这个答案,您可能永远也不会再回来了。问题不仅仅在于,看来git命令行的文档不够直观。
Nearoo 2015年

1
是的,但是有了SourceTree,我几乎不需要担心检查文档。一切通常都很直观-只需右键单击并查看选项即可。(顺便说一句,我与工具没有任何关系,就像工具一样!)
史蒂夫·钱伯斯

17

一种简单的方法:

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

如需更多信息,请参见


15

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

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

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

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

有关更多信息,您可以访问Git中的本地和远程重命名分支


13

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

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


11

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

git branch -m [old_branch] [new_branch]

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

git push origin :[old_branch]

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

git push origin :old_branch new_branch

6

可以使用以下命令完成Git分支的重命名:

  1. git branch -m oldBranch newBranch

  2. 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$

5

对于Git GUI用户,这再简单不过了。在Git GUI中,从菜单项Branch:Rename创建的“重命名分支”对话框的下拉列表中选择分支名称,键入新名称,然后单击“重命名”。我突出显示了在哪里可以找到下拉列表。

重命名本地Git分支


3

如果你想:

  • 重命名Git存储库,运行: git branch -m <oldname> <newname>
  • 通过以下方式删除旧分支: git push origin: old-name new-name
  • 使用以下命令提交: git commit <newname>
    • 然后使用: git push origin new_branch_name:master
  • 如果要检查状态,请使用: git status
  • 如果您想退房,请使用: git checkout

3

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

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

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


如果您在记住命令时遇到麻烦,可以自己设置shell或git别名。
肖恩

如果我需要在这么多不同的机器上运行命令怎么办?
戴开宪


0

您所要做的只是三个步骤:

  1. 为.git / refs / heads下的旧分支赋予新名称
  2. 为.git / logs / refs / heads下的旧分支赋予新名称
  3. 更新.git / HEAD以使用新的分支名称
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.