重命名GitHub中的分支


296

我刚刚使用重命名了本地分支

git branch -m oldname newname

但这只会重命名分支的本地版本。如何在GitHub上重命名一个?



您是否已检查管理员设置?我当前在github上的项目没有任何分支,但是您可以在那里重命名存储库,因此我认为您也可以重命名分支。
evanmcdonnal 2012年

12
@evanmcdonnal不,您不能从GitHub站点重命名Git分支。
安德鲁·马歇尔

这个问题的答案几乎普遍都是错误的。问题不是如何重命名git分支,而是如何重命名github分支。github上的许多东西都绑定到一个分支,这意味着任何答案都需要涵盖这些东西。例如,将master重命名为main
gman

@gman值得的是,这些答案似乎满足了OP的要求。从技术上严格的角度,或者您当前正在研究的相关问题,OP的问题可能还没有被完美地表达出来。但是,这个问题并非来自git或GitHub的深厚技术背景。从这个角度来看,可以将其视为“初学者”或基本问题。这样,它针对此听众适当地表达和回答。固然令人沮丧,但我认为这个问题是正确的/相关的,尤其是对于BLM之前的git / Hub用法问题。
SherylHohman

Answers:


309

如前所述,在Github上删除旧的并重新推送,尽管所使用的命令比必要的命令更为冗长:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

简单。稍微剖析一下命令,git push命令本质上是:

git push <remote> <local_branch>:<remote_branch>

因此,在没有指定local_branch的情况下进行推送实质上意味着“从本地存储库中获取任何内容,并将其设置为远程分支”。我一直认为这完全是糊涂,但这是完成的方式。

编辑:Git 1.7开始,有一种删除远程分支的替代语法:

git push origin --delete name_of_the_remote_branch

编辑:如@ void.pointer在评论中提到

请注意,您可以结合使用2个推入操作:

git push origin :old_branch new_branch

这将删除旧分支并推送新分支。

可以将其转换为简单的别名,该别名将远程原始分支和新分支名称作为参数,位于~/.gitconfig

[alias]
    branchm = "!git branch -m $2 $3 && git push $1 :$2 $3 -u #"

用法:

git branchm origin old_branch new_branch

请注意,shell命令中的位置参数在git的较早版本(2.8?之前)中存在问题,因此别名可能会因git版本而异。有关详细信息,请参见此讨论


32
请注意,您可以结合使用以下两种推送操作:git push origin :old_branch new_branch。这将删除旧分支并推送新分支。
void.pointer 2014年

4
有什么理由不能在删除旧分支之前推动新分支?我个人更喜欢在创建操作成功之后执行删除操作的过程,以防万一出错。
jmort253

7
不起作用。它将分支简单地重新命名为Github。
geoff

1
@AdamParkin 1. git branch -m new_branch(将old_branch重命名为new_branch)2. git commit -m 'msg'git push3。4.嗯,old_branch出现在Github,Google问题中,我被带到您的答案5. git push origin :old_branch(说它已删除)6 git push origin new_branch....然后说完* [new branch] new_branch -> old_branch。返回Github并old_branch再次出现。如果我在Github网络用户界面中删除,则可以选择“还原”,因此推送new_branch似乎只是在还原。
凯文2013年

2
要注意的一件事是,当您重命名分支时,针对该拉取请求打开的任何拉取请求都将自动关闭。我们必须重命名分支,然后手动重新打开所有拉取请求
...。– jmort253

24

以下命令对我有用:

git push origin :old-name-of-branch-on-github
git branch -m old-name-of-branch-on-github new-name-for-branch-you-want
git push origin new-name-for-branch-you-want

这是有效的简短答案。顺便说一句,第一个命令也可以放在答案的最后一个命令中。
Eric Wang

这个答案涵盖git而不是github
gman

1
实际上,我只做了两次,就可以在github上工作了。
spozun

17

我发现3命令如何更改git分支名称,这些命令是实现此目的的更快方法

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本地和远程分支


1
git push --set-upstream如果您碰巧在删除远程分支之前使用github应用在本地更改分支名称,则这是最重要的部分。
路易·杨

这个答案涵盖git而不是github
gman

12

只需删除旧分支并创建新分支即可。

示例(仅重命名远程分支):

git push origin :refs/heads/oldname
git push origin newname:refs/heads/newname

您也可能应该重命名本地分支并更改推/拉位置的设置。


1
第二个命令不应该git push origin newname:refs/heads/newname吗?master和newname不能指向同一提交。
史蒂夫·弗利

“主人”仅作为示例,现在将更改。
六。

也许应该颠倒两个命令的顺序(即先上传新名称,然后删除旧名称)
Vi。

这个答案涵盖了git而不是github
gman

@gman,不重命名Git-wise也重命名它为Github-wise吗?
六。

9

重命名git local和remote中的分支

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

所以结论是

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name

这个答案涵盖了git而不是github
gman

这是针对git的,而GitHub在git下,因此它可以正常工作,并且可以与我和其他人一起使用
Abdelrahman Mohamed

没用 尝试第一步和第二步git branch -m new-name && git push origin :master new-name。它会失败。如果这个答案只是关于git而不是github,那么这个问题是其他几个问题的重复,应该关闭。如果确实与github有关,那么答案必须涵盖github。这个答案没有。
gman


2

这对我有用:

1.)首先创建一个新分支:git push github newname:refs / heads / newname

2.)在github站点上,转到设置并将Default分支更改为newname

3.)删除旧名称git push github --delete oldname


0
  1. 下载Atlassian SourceTree(免费)。
  2. 导入存储库的本地克隆。
  3. 右键单击侧边栏中的分支以重命名。从上下文菜单中选择“重命名分支...”,然后对其进行重命名。
  4. 推到原点。

谢谢,但是我不得不切换到分支以及导入它。
Flash Sheridan

1
这个答案涵盖git而不是github
gman

0

本文展示了如何真正轻松地实现它。
1.要重命名本地Git分支,我们可以使用Git branch -m命令来修改名称:
git branch -m feature1 feature2
2.如果您只是在寻找重命名远程Git分支的命令,那就是“
git push -u origin feature2:feature3
请检查您是否没有在执行此操作之前,可以使用分支上的标签git tag


这个答案涵盖了git而不是github
gman

0

另一种方法是重命名以下文件

  1. 浏览您的项目目录
  2. 重命名.git/refs/head/[branch-name].git/refs/head/new-branch-name
  3. 重命名.git/refs/remotes/[all-remote-names]/[branch-name].git/refs/remotes/[all-remote-names]/new-branch-name

重命名本地PC 原始服务器/远程服务器上的Head&Remotes

分支现已重命名(本地和远程!)


注意

如果您当前的分支名称包含斜杠/),则git将创建目录,如下所示:

当前分支名称: "awe/some/branch"

  • .git/refs/head/awe/some/branch
  • .git/refs/remotes/[all-remote-names]/awe/some/branch

希望分支名称: "new-branch-name"

  1. 浏览您的项目目录
  2. branch从复制文件.git/refs/*/awe/some/
  3. 放入.git/refs/head/
  4. 复制branch所有文件.git/refs/remotes/*/awe/some/
  5. 把他们放进去.git/refs/remotes/*/
  6. 将所有opi branch文件重命名为new-branch-name
  7. 检查目录和文件结构现在是否看起来像这样:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. 在所有远程源/服务器上进行相同的操作(如果存在)
    • 信息:在远程服务器上通常没有refs / remotes / *目录,因为您已经在远程服务器上了;)(在高级git配置中也许是可能的,但是我从未见过)

现在将分支从重命名awe/some/branchnew-branch-name(本地和远程!)

分支名称中的目录被删除。


信息:这种方法可能不是最好的方法,但对于其他方法可能有问题的人仍然有效


这个答案涵盖git而不是github
gman

0

就我而言,我需要一个附加命令 来获取重命名的分支以将其推送到。
git branch --unset-upstream
origin newname

(为了便于键入),我首先git checkout oldname
然后运行以下命令:

git branch -m newname
git push origin :oldname git push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

可能仅需要此额外步骤,因为我(倾向于)通过设置分支上的远程跟踪。这样,当我签出后,我随后只需要类型而不是git push -u origin oldnameoldnamegit pushgit push origin oldname

如果我使用命令git branch --unset-upstream之前git push origin newbranch,GIT中重新创建 oldbranch和推动newbranchorigin oldbranch-击败我的意图。


这个答案涵盖了git而不是github
gman

@gman点已采取。我的解决方案在GitHub存储库的本地git副本上重命名后,在本地使用git远程重命名GitHub上的分支。因此,当您要使用命令行而不是GitHub网站界面时,并且您拥有一个也要更新的本地克隆时,也许可以将其视为专用的解决方案。感谢您强调此区别,并澄清此答案是针对特殊情况,而不是一般解决方案。
SherylHohman

问题是github将功能与分支联系起来。尝试将master重命名为main,您的指令将失败。
gman

-1

以下命令在本地重命名分支,删除远程位置上的旧分支,然后推送新分支,将本地分支设置为跟踪新远程:

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

尽管您的代码段可能会解决问题,但是您应该描述代码的目的(它如何解决问题)。此外,您可能想查看stackoverflow.com/help/how-to-answer
Ahmad F

这个答案涵盖git而不是github
gman

-1

就这么简单。为了在本地和远程重命名git branch,请使用以下代码段(经过测试,可像超级按钮一样工作):

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

说明:

  1. 重命名步骤:

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

  2. 删除步骤:

    Git参考: git push origin:experimental在源存储库中找到与实验匹配的ref(例如refs / heads / experimental),并将其删除。

  3. 更新远程仓库步骤(用于跟踪的上游参考):

    Git参考:-- set-upstream对于每个最新的或成功推送的分支,请添加上游(跟踪)参考,该参考由无参数git-pull [1]和其他命令使用。有关更多信息,请参见git-config [1]中的branch..merge。


这个答案涵盖git而不是github
gman

-1

3个简单步骤

  • git push原点头

  • git branch -m老分支名称new-branch-name

  • git push原点头


这个答案涵盖git而不是github
gman

-1

在git分支上运行git branch -m old_name new_name这将修改本地存储库上的分支名称。git push origin:old_name new_name这会将修改后的名称推送到remote并删除旧分支git push origin -u new_name设置要跟踪的本地分支远程分支。这解决了问题


这个答案涵盖git而不是github
gman
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.