如何重命名本地 Git 分支?
Posted
技术标签:
【中文标题】如何重命名本地 Git 分支?【英文标题】:How do I rename a local Git branch? 【发布时间】:2018-01-27 18:18:43 【问题描述】:我不想重命名远程分支,如 Rename master branch for both local and remote Git repositories 中所述。
如何重命名尚未推送到远程存储库的本地分支?
如果您还需要重命名 remote 分支:How do I rename both a Git local and remote branch name?
【问题讨论】:
【参考方案1】:如果您想在指向任何分支时重命名分支,请执行以下操作:
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会抛出分支已存在 错误:
git branch -M <newname>
【讨论】:
我真正想知道的是,当/如果你推送时,这是否一定会影响远程分支 @PandaWood:推送时会添加新分支,但不会删除旧分支。如果您使用git push -f --mirror
,那么它将重命名远程上的分支,但您应该仅在远程只是作为当前存储库的副本时使用此方法。另请参阅此问题:***.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”。
完成此操作后,您还应该运行git push origin :<old_name> <new_name>
来更新您的远程分支名称。【参考方案2】:
git branch -m old_branch_name new_branch_name
上述命令将更改您的分支名称,但您必须非常小心使用重命名的分支,因为它仍会引用与其关联的旧上游分支(如果有)。
如果您想在本地分支重命名为 new_branch_name(示例名称)后将一些更改推送到 master:
git push origin new_branch_name:master
(现在更改将转到 master 分支,但您的本地分支名称是 new_branch_name)
更多详情请见“How to rename your local branch name in Git”。
【讨论】:
【参考方案3】:要重命名当前分支:
git branch -m <newname>
【讨论】:
如果你只是改变大小写,你需要使用 -M 来重命名,因为 git 会告诉你分支已经存在。 之后git push origin HEAD:<oldname>
【参考方案4】:
到目前为止的答案都是正确的,但这里有一些额外的信息:
可以使用“-m”(移动)安全地重命名分支,但必须小心使用“-M”,因为它会强制重命名,即使已经存在同名的分支。以下是“git-branch”手册页的摘录:
使用 -m 或 -M 选项,
<oldbranch>
将重命名为<newbranch>
。如果<oldbranch>
有相应的 reflog,则将其重命名为匹配<newbranch>
,并创建一个 reflog 条目以记住分支重命名。如果<newbranch>
存在,则必须使用-M 来强制进行重命名。
【讨论】:
它被新名称/分支覆盖。例如,如果您在 git 中有以下分支: master b1-M
标志对于强制重命名也很有用,如果您只是更正分支名称的大小写,例如将myBranch
更改为MyBranch
。 (使用-m
,git 返回fatal: A branch named 'MyBranch' already exists.
)【参考方案5】:
我愚蠢地命名了一个以连字符开头的分支,然后签出了 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要重命名当前分支(分离的 HEAD 状态除外),您还可以使用此别名:
[alias]
mvh = !sh -c 'git branch -m `git rev-parse --abbrev-ref HEAD` $1'
【讨论】:
【参考方案7】:另一个选择是根本不使用命令行。 Git GUI 客户端(例如 SourceTree)消除了导致此类问题成为 Stack Overflow 上观看次数最多的问题的大部分语法学习曲线/痛苦。
在 SourceTree 中,右键单击左侧“分支”窗格中的任何本地分支,然后选择“重命名...”。
【讨论】:
我不会称之为痛苦。 git 命令非常好用,一旦你看到这个答案,你可能再也不会回来了。问题更多的是,看起来,git 命令行的 文档 不够直观。 是的,但是使用 SourceTree,我几乎不需要担心检查文档。一切通常都很直观 - 只需右键单击并查看选项是什么。 (顺便说一句,我与他们没有任何关系——就像这个工具一样!)【参考方案8】:使用此命令重命名分支:
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
【讨论】:
【参考方案9】:以下是重命名分支的步骤:
-
切换到需要重命名的分支
git branch -m <new_name>
git push origin :<old_name>
git push origin <new_name>:refs/heads/<new_name>
编辑(2017 年 12 月 1 日): 确保运行命令 git status
并检查新创建的分支是否指向它自己的 ref 而不是旧的。如果您找到对旧分支的引用,则需要使用以下命令取消设置上游:
git branch --unset-upstream
【讨论】:
这是最好的答案,因为它描述了正确完成重命名的完整过程 解释步骤: 1 = 切换到分支 locally,2 = 'move' 即'rename' 本地分支 (-m
),3 = push 'nothing'到远程上的旧分支目标(即删除对远程分支的引用) - 冒号左侧是“源”,右侧是“目标”,4 = 将引用(指针)推送到新分支, 到远程
@Milind Anantwar,“检查新分支是否指向它自己的参考”是什么意思?您能否解释一下git branch --unset-upstream
如何解决您所指的不同步条件?【参考方案10】:
可能正如其他人所提到的,这将是分支命名中的大小写不匹配。
如果你有这样的情况,我猜你是在 Windows 上,这也会引导你:
$ git branch -m CaseSensitive casesensitive
fatal: A branch named 'casesensitive' already exists.
然后你要做一个中间步骤:
$ git branch -m temporary
$ git branch -m casesensitive
仅此而已。
【讨论】:
请注意,这种情况也可能出现在 Mac 上,它的文件系统也(特别烦人)不区分大小写。 或者,您可以使用-M
而不是-m
一步完成这种“套管修复”重命名。【参考方案11】:
高级 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
【讨论】:
【参考方案12】:要在本地重命名分支:
git branch -m [old-branch] [new-branch]
现在您还必须在远程服务器上传播这些更改。
要推送已删除旧分支的更改:
git push origin :[old-branch]
推送创建新分支的更改:
git push origin [new-branch]
【讨论】:
【参考方案13】:由于您不想将分支推送到远程服务器,因此此示例将很有用:
假设您有一个名为“my-hot-feature”的现有分支,并且您想将其重命名为“feature-15”。
首先,您要更改本地分支。这再简单不过了:
git branch -m my-hot-feature feature-15
欲了解更多信息,您可以访问Locally and Remotely Renaming a Branch in Git。
【讨论】:
【参考方案14】: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
【讨论】:
【参考方案15】:这里是三个步骤:一个可以在终端中调用并更改分支名称的命令。
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 是一篇很好的文章。
【讨论】:
【参考方案16】:试图具体回答问题(至少是标题)。
您也可以重命名 local 分支,但要继续跟踪远程上的旧名称。
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
。但是,为了您的安全,我强烈反对这样做。
【讨论】:
【参考方案17】: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
注意:最后一个命令具有破坏性,会重命名您的分支,但您将丢失具有该名称的旧分支和那些提交,因为分支名称必须是唯一的。
【讨论】:
【参考方案18】:一旦你的分支完成,重命名分支将会很有用。然后新的东西来了,你想在同一个分支中开发而不是删除它并创建新的。
根据我的经验,要在 Git 中重命名本地和远程分支,您应该执行以下步骤。
引用Multiple States - Rename a local and remote branch in 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
这个命令的时候遇到了问题对吧?【参考方案19】:
如果要更改当前分支的名称,请运行:
git branch -m [old_branch] [new_branch]
如果要删除旧的远程分支,请运行:
git push origin :[old_branch]
如果你想删除旧的远程分支并创建一个新的远程分支,运行:
git push origin :old_branch new_branch
【讨论】:
【参考方案20】:如果您愿意使用SourceTree(我强烈推荐),您可以右键单击您的分支并选择“重命名”。
【讨论】:
【参考方案21】:本地更改分支非常简单...
如果您在要更改名称的分支上,只需执行以下操作:
git branch -m my_new_branch
否则,如果您在master
或任何其他分支,而不是您想更改名称的分支,只需执行以下操作:
git branch -m my_old_branch my_new_branch
另外,我创建了下面的图像以在 命令行 上显示此操作。在这种情况下,您在master
分支上,例如:
【讨论】:
【参考方案22】:如果你想:
重命名 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
【讨论】:
【参考方案23】:之前的所有答案都在谈论git branch -m
。当然,它很容易操作,但对我来说,记住另一个 Git 命令可能有点困难。所以我试着用我熟悉的命令来完成工作。是的,你可能猜到了。
我使用git branch -b <new_branch_name>
。如果您现在不想保存旧分支,可以执行git branch -D <old_branch_name>
将其删除。
我知道这可能有点乏味,但更容易理解和记住。希望对你有帮助。
【讨论】:
【参考方案24】: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$
【讨论】:
【参考方案25】:在 phpStorm 中:
VCS → Git → 分支... → 本地分支 → _your_branch_ → 重命名
【讨论】:
【参考方案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
欲了解更多信息,请参阅this。
【讨论】:
【参考方案27】:-
重命名您的本地分支。
如果您在要重命名的分支上:
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
【讨论】:
【参考方案28】:对于 Git GUI 用户来说,再简单不过了。 在 Git GUI 中,从菜单项 Branch:Rename 创建的“Rename Branch”对话框的下拉列表中选择分支名称,输入新名称,然后单击“Rename”。我已经突出显示了在哪里可以找到下拉列表。
【讨论】:
【参考方案29】:只需三个步骤即可在 remote
以及 GitHub 上复制名称更改:
第一步git branch -m old_branchname new_branchname
第二步git push origin :old_branchname new_branchname
第三步git push --set-upstream origin new_branchname
【讨论】:
我还必须做一件事:git push --set-upstream origin new_branchname
@Nomade 回答中提到
@Dev 并非在所有情况下 Dev,我最近必须更新,因为使用 bitbucket 和 codecommit,第 3 步是必要的【参考方案30】:
git branch -m [old-branch] [new-branch]
-m 表示将所有从 [old-branch] 移动到 [new-branch] 并记住您可以将 -M 用于其他文件系统。
【讨论】:
以上是关于如何重命名本地 Git 分支?的主要内容,如果未能解决你的问题,请参考以下文章