题 如何重命名本地Git分支?


我不想重命名远程分支,如中所述 为本地和远程Git存储库重命名master分支

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


6714
2017-07-06 03:20


起源




答案:


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

git branch -m <oldname> <newname>

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

git branch -m <newname>

记住这个的方法是 -m 用于“移动”(或 mv),这是你重命名文件的方式。


10700
2017-07-06 03:21



我真正想知道的是,当你推/推时,这是否一定会影响远程分支 - PandaWood
@PandaWood:它会在你推送时添加新分支,但不会删除旧分支。如果你使用 git push -f --mirror,然后它将重命名遥控器上的分支,但如果遥控器只是当前存储库的副本,则应该只使用此方法。另见这个问题: stackoverflow.com/questions/1526794/git-rename-remote-branch - siride
@PandaWood,这取决于如何 push.default 已配置。默认 (matching)它将推送到名称匹配的遥控器。你必须这样做 git push origin <newname>:<oldname> 或者您将创建一个新的远程分支。但是,如果 push.default 被设定为 upstream, 然后你可以 push origin head 并且事情将转到遥控器上的oldname。 - Erin Stanfill
@ NightOwl888:-m可能是“move”的缩写,遵循Unix使用的惯例 mv 重命名文件。这样做的原因是在基于目录的inode文件系统中移动和重命名是完全等效的。 - siride
长的名字 -m 选项是 --move,例如, git branch --move master 将当前分支重命名为“master”。 - robenk


git branch -m old_branch_name new_branch_name

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

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

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

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


351
2018-01-21 09:49





要重命名当前分支:

git branch -m <newname>

247
2018-06-20 15:05



如果您只是更改大小写,则需要使用-M重命名,因为git会告诉您分支已经存在。 - cjspurgeon
你用这个评论救了我。 - jpadilladev
@cjspurgeon Git通过如此直观,意想不到的程度让我惊叹不已。多年以来。 - 0xc0de


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

1. switch to branch which needs to be renamed
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 并检查新创建的分支是否指向自己的ref而不是旧的分支。如果找到对旧分支的引用,则需要使用以下命令取消设置上游:

git branch --unset-upstream

186
2018-04-15 12:50



上游哪一步会取消上游?在第4步之前? - Cyclonecode
@Cyclonecode:是的。在第4步之后。但是请确保运行git status以检查它是否引用了旧分支。 - Milind Anantwar


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

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

124
2017-10-14 03:22



这个 为我工作得更好。这两个步骤给了我以下错误: 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
运行命令时出现问题 git push origin :old-name new-name 对? - trungk18
是的(对不起,我的意思是“第二步”,而不是“两步” - 累了) - Anto


到目前为止的答案是正确的,但这里有一些额外的信息: 可以使用'-m'(移动)重命名分支,但必须小心,因为'-M'强制重命名,即使已存在具有相同名称的现有分支。以下是'git-branch'手册页的摘录:

使用-m或-M选项, <oldbranch> 将重命名为 <newbranch>。如果 <oldbranch> 有一个相应的reflog,它被重命名为匹配 <newbranch>,并创建一个reflog条目来记住分支重命名。如果 <newbranch> 存在,-M必须用于强制重命名发生。


83
2017-09-24 13:21



被覆盖的分支会发生什么? - Kevin Dice
它被新名称/分支覆盖。例如,如果你在git中有以下分支:master b1 < - 当你执行'git branch -M b2'时的当前分支b2你将只有:master b2 < - 当前分支b1将会消失,如果你想恢复它你应该通过它的哈希检查出来。您可以通过输入'git reflog'来查看它。干杯。 - Vanchev
该 -M 如果您只是更正分支名称的大小写,例如,flag也可用于强制重命名,例如改变 myBranch至 MyBranch。 (带 -m,git返回 fatal: A branch named 'MyBranch' already exists.) - Jon Schneider


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

68
2017-12-17 13:45





我愚蠢地命名一个以连字符开头的分支,然后检查出主人。我不想 删除 我的分支,我在其中工作。

这些都没有奏效:

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

58
2017-11-09 07:31



难道你不能在refs / heads中重命名文件吗? - android.weasel
同上。如果你必须深入到目录结构来做这个魔术,那就一直做'mv - -dumb-name brilliant-name'做一个'git branch -av',你会看到一个目录结构git的/裁判。或者也许'grep -R ^ .git / refs'直接看到哈希值。 - Dave X
你可能已经习惯了 reflog - Code Whisperer
老实说,如果这是你想要采取的路线,我会避免(IMO令人困惑,如果你不知道你在做什么那么有潜在危险)首先通过.git目录进行游戏,并且只是做一些具有一些“git log”解析的普通命令(使用适当的标志来显示分支,并确定要从哪个shasum签出新分支),然后执行此操作。然后,删除名为wonky的分支。一世 讨厌 那个git坚持认为你需要了解它的所有内部工作来做一些事情,但是非常感谢你 能够 做那些事。 - Jon V
在2.10.1+中创建一个名字不好的分支更难。如果你以某种方式做到这一点,你可以使用git branch -v来获得你的分支的短哈希版本(为远程添加-r)。然后,您可以使用git rev-parse <shorthash>来获取完整哈希值(如果需要)。 - House of Dexter


要在本地重命名分支:

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

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

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

git push origin :[old-branch]

推动创建新分支的更改:

git push origin [new-branch]

55
2017-08-20 06:39