在GitHub中重命名分支

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

git branch -m oldname newname

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

287616 次浏览

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

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

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

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

如前所述,在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提到的。注释中的指针

注意,你可以结合这两个push操作:

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版本而有所不同。详见这个讨论

下面的命令对我有用:

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

以下是对我有效的方法:

  1. 首先创建新的分支:

    git push github newname :refs/heads/newname
    
  2. 在GitHub网站上,进入设置并将默认的分支更改为newname

  3. 删除oldname

    git push github --delete oldname
    

你不用终端也能做到。您只需要用新名称创建一个分支,然后删除旧名称。

创建一个分支

在存储库的分支选择器中,只需开始键入一个新分支 的名字。它会给你一个创建新分支的选项:

Create a branch

它会从你的当前上下文中分支出来。例如,如果你在 bugfix分支,它会从bugfix创建一个新分支而不是 的主人。而是查看一个提交还是一个标记?它会分支你的代码

删除分支

你还会在仓库的分支页面中看到一个删除按钮:

删除一个分支

作为额外的奖励,它还会给你一个链接到分支的Pull

我只是从:创建并删除分支复制粘贴这个内容

  1. 下载Atlassian Sourcetree(免费)。
  2. 导入存储库的本地克隆。
  3. 在侧边栏中右键单击要重命名的分支。选择“重命名分支”;从上下文菜单,并重命名它。
  4. 推到起源

这篇文章展示了如何做到这一点非常简单。

  1. 要重命名一个本地Git分支,我们可以使用Git branch -m命令修改名称:

     git branch -m feature1 feature2
    
  2. 如果你只是在寻找重命名远程Git分支的命令,这就是它:

     git push -u origin feature2:feature3
    

    在执行此操作之前,请检查分支上是否有标记。你可以用git tag来实现。

我找到了三个关于如何更改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. 导航您的项目目录。
  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上的头部和遥控器重命名为源服务器/远程服务器上的而且

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


注意

如果你当前的Branch-name包含斜杠 (/) Git会像这样创建目录:

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

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

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

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

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

branch-name中的目录被移除。


这种方法可能不是最好的,但对于那些在其他方法上有问题的人来说仍然有效

就我而言,我需要一个额外的命令,

git branch --unset-upstream

让我重命名的分支上推到origin newname

(为了便于输入),我首先git checkout oldname

.执行以下命令

git branch -m newname <br/> git push origin:oldname*or*git push origin——delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

这个额外的步骤可能只是必要的,因为我(倾向于)通过git push -u origin oldname在我的分支上设置远程跟踪。这样,当我签出oldname时,我随后只需要键入git push而不是git push origin oldname

如果我做git push origin newbranch之前使用命令git branch --unset-upstream, git 重新创造 oldbranch并将newbranch推到origin oldbranch——这违背了我的意图。

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

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

在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

所以结论是:

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

就这么简单。为了在本地和远程重命名一个Git分支,使用这个代码片段(经过测试,效果很好):

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

解释:

  1. 重命名步骤:
< p > Git参考: 使用-m或-m选项 & lt; oldbranch>将重命名为<newbranch>如果 & lt; oldbranch>有过相应的reflog,是重命名匹配吗 newbranch>,并创建一个reflog条目来记住该分支 重命名。如果& lt; newbranch>,则必须使用-M强制重命名 发生。< / p >
  1. 删除步骤:
< p > Git参考: Git推送来源:实验性找到一个匹配experimental in的ref 原始存储库(例如refs/heads/experimental),并删除它
  1. 远程存储库步骤的更新(用于跟踪的上游参考):
< p > Git参考: ——set-upstream对于每个最新或成功推送的分支,添加upstream (tracking)引用,由less参数使用 Git-pull[1]等命令。有关更多信息,请参见 分支。你们;name>。在git-config[1]中合并>

简单三步

  • < p > git push origin head

  • < p > git branch -m old-branch-name new-branch-name

  • < p > git push origin head

在Git分支中,运行:

git branch -m old_name  new_name

这将修改本地存储库中的分支名称:

git push origin :old_name new_name

这将把修改后的名称推到远程并删除旧的分支:

git push origin -u new_name

它设置本地分支来跟踪远程分支。

这就解决了问题。

在GitHub端,您可以使用新的(2021年1月)"支持重命名现有分支"(受保护的分支只能由管理员重命名,见末尾)

跟随本教程:https://docs.github.com/en/github/administering-a-repository/renaming-a-branch

rename branch dialog——https://i2.wp.com/user-images.githubusercontent.com/2503052/105069955-a231fa80-5a50-11eb-982c-a114c9c44c57.png?ssl=1

看到“如何在GitHub网站上重命名分支?"。

这是一个更好的方法,因为这样重命名一个分支(在github.com)将():

  • 重新定位任何打开的拉请求
  • 基于分支更新任何草案版本
  • 移动显式引用旧名称的任何分支保护规则
  • 更新用于构建GitHub页面的分支,如果适用的话
  • 在存储库主页上向存储库贡献者、维护者和管理员显示通知,说明如何更新存储库的本地副本
  • 向git推送到旧分支的贡献者显示一个通知
  • 将旧分支名的web请求重定向到新分支名
  • 返回“永久移动”;在API请求中响应旧的分支名称

2021年12月更新:

< a href = " https://github。blog/changelog/2021-12-16- Restrict - rename -protected-branches- admins/" rel="nofollow noreferrer">将受保护分支重命名为admins

现在,只有管理员可以重命名受分支保护规则保护的分支。

GitHub允许仓库合作者重命名仓库中的每个分支,除了默认分支。

当合作者重命名一个分支时,应用于该分支的任何非通配符分支保护规则也会被更改,以匹配该分支的新名称。

由于只有管理员可以修改分支保护规则,重命名受保护的分支现在仅限于管理员用户。

有关更多信息,请访问重命名分支管理分支保护规则

这是Hazarapet Tunanyan的 answer中的一个附加条件。

git branch -m old_branch new_branch         # Rename branch locally




git push origin :old_branch                 # Delete the old branch
# You might be getting an error doing the above step, skip to the next step


git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

执行git push origin :old_branch会得到一个错误,因为你试图删除的old_branch可能是默认的分支

只需执行其他2步,然后转到github并从设置中更改默认分支,然后你将能够执行git push origin :old_branch

分支重命名现在可以通过GitHub API使用

你可以使用GitHub REST API重命名分支

你可以像这样轻松地通过gh CLI运行API命令:

gh api "repos/{owner}/{repo}/branches/{branch}/rename" -f new_name={newBranch}