我刚刚使用重命名了我的本地分支
git branch -m oldname newname
但这只会重命名分支的本地版本。如何重命名 GitHub 上的那个?
如前所述,删除 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 命令中的位置参数在较旧的(2.8 之前?)版本的 Git 中存在问题,因此别名可能会根据 Git 版本而有所不同。有关详细信息,请参阅 this discussion。
以下命令对我有用:
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
old-name-of-branch-on-github
的子分支有何影响?他们会成为 new-name-for-branch-you-want
的孩子吗?
我找到了三个关于如何更改 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
如果你需要一步一步的,你可以阅读这篇很棒的文章:
How to Rename Git Local and Remote Branches
git push --set-upstream
是最重要的部分。
在 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 branch -m new-name && git push origin :master new-name
。它会失败。如果这个答案只是关于 git 而不是 github 那么这个问题是其他几个问题的重复,应该关闭。如果真的是关于 github,那么答案必须涵盖 github。这个答案没有。
你可以在没有终端的情况下做到这一点。您只需要使用新名称创建一个分支,然后删除旧名称。
创建一个分支 在您的存储库的分支选择器中,只需开始输入一个新的分支名称。它会给你创建一个新分支的选项:它会从你当前的上下文中分支出来。例如,如果您在 bugfix 分支上,它将从 bugfix 而不是 master 创建一个新分支。而是查看提交或标签?它将从该特定版本中分支您的代码。删除分支 您还会在存储库的“分支”页面中看到一个删除按钮:作为额外的奖励,它还会为您提供指向该分支的拉取请求的链接(如果有的话)。
我只是复制并粘贴以下内容:Create and delete branches
只需删除旧分支并创建新分支。
示例(仅重命名远程分支):
git push origin :refs/heads/oldname
git push origin newname:refs/heads/newname
您可能还应该重命名本地分支并更改推/拉位置的设置。
git push origin newname:refs/heads/newname
吗? master 和 newname 可能不指向同一个提交。
git push origin :refs/heads/master
在 GitHub 端,您可以使用新的(2021 年 1 月)“Support for renaming an existing branch”(受保护的分支只能由管理员重命名,见最后)
遵循本教程:https://docs.github.com/en/github/administering-a-repository/renaming-a-branch
https://i.stack.imgur.com/VLLnY.png
请参阅“How do I rename branch on the GitHub website?”。
这是一种更好的方法,因为以这种方式重命名分支(在 github.com 上)将 (source):
重新定位任何打开的拉取请求
根据分支更新任何草稿版本
移动任何明确引用旧名称的分支保护规则
更新用于构建 GitHub Pages 的分支(如果适用)
在存储库主页上向存储库贡献者、维护者和管理员显示通知,其中包含更新存储库本地副本的说明
向 git push 到旧分支的贡献者显示通知
将对旧分支名称的 Web 请求重定向到新分支名称
在旧分支名称的 API 请求中返回“永久移动”响应
2021 年 12 月更新:
将受保护的分支重命名为管理员现在,只有管理员可以重命名受分支保护规则保护的分支。 GitHub 允许存储库协作者重命名存储库中的每个分支,默认分支除外。当协作者重命名分支时,适用于该分支的任何非通配符分支保护规则也会更改以匹配分支的新名称。因为只有管理员可以修改分支保护规则,受保护分支的重命名现在仅限于管理员用户。有关更多信息,请访问重命名分支和管理分支保护规则。
就那么简单。为了在本地和远程重命名 Git 分支,请使用此代码段(经过测试并像魅力一样工作):
git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>
解释:
重命名步骤:
Git 参考:使用 -m 或 -M 选项,
删除步骤:
Git 参考: git push origin :experimental 在origin仓库(如refs/heads/experimental)中找到一个匹配experimental的ref,并删除它。
更新远程存储库步骤(用于跟踪的上游参考):
Git 参考:--set-upstream 对于每个最新或成功推送的分支,添加上游(跟踪)参考,由无参数的 git-pull[1] 和其他命令使用。有关更多信息,请参阅 git-config[1] 中的 branch.
这对我有用:
首先创建新分支: git push github newname :refs/heads/newname 在 GitHub 站点上,转到设置并将默认分支更改为 newname 删除旧名称 git push github --delete oldname
这是 Hazarapet Tunanyan's 答案中的附加条件。
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
。
另一种方法是重命名以下文件:
导航您的项目目录。将 .git/refs/head/[branch-name] 重命名为 .git/refs/head/new-branch-name。将 .git/refs/remotes/[all-remote-names]/[branch-name] 重命名为 .git/refs/remotes/[all-remote-names]/new-branch-name。
在本地 PC 和源/远程服务器上重命名 head 和 remotes。
分支现在被重命名(本地和远程!)
注意力
如果您当前的 branch-name 包含斜杠 (/
),Git 将创建如下目录:
当前分支名称: "awe/some/branch"
.git/refs/head/awe/some/branch
.git/refs/remotes/[所有远程名称]/awe/some/branch
希望分支名称: "new-branch-name"
导航您的项目目录。从 .git/refs/*/awe/some/ 复制分支文件。把它放在 .git/refs/head/ 中。从所有 .git/refs/remotes/*/awe/some/ 复制分支文件。将它们放在 .git/refs/remotes/*/ 中。将所有复制的分支文件重命名为 new-branch-name。检查目录和文件结构现在是否如下所示:
.git/refs/head/新分支名称
.git/refs/remotes/[all-remote-names]/new-branch-name
在所有远程源/服务器上执行相同操作(如果存在)
信息:在远程服务器上通常没有 refs/remotes/* 目录,因为您已经在远程服务器上;)(好吧,也许在高级 Git 配置中它可能是可能的,但我从未见过)
分支现在从 awe/some/branch 重命名为 new-branch-name (本地和远程!)
分支名称中的目录已删除。
信息:这种方式可能不是最好的,但它仍然适用于可能对其他方式有问题的人
现在可以通过 GitHub API 使用分支重命名
您可以rename a branch with the GitHub REST API。
您可以像这样轻松run API commands via the gh
CLI:
gh api "repos/{owner}/{repo}/branches/{branch}/rename" -f new_name={newBranch}
这篇文章展示了如何轻松地做到这一点。
要重命名本地 Git 分支,我们可以使用 Git branch -m 命令修改名称: git branch -m feature1 feature2 如果您只是在寻找重命名远程 Git 分支的命令,就是这样: git push - u origin feature2:feature3 在执行此操作之前,请检查分支上是否没有标签。你可以用 git 标签来做到这一点。
就我而言,我需要一个额外的命令,
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 分支上,运行:
git branch -m old_name new_name
这将修改本地存储库上的分支名称:
git push origin :old_name new_name
这会将修改后的名称推送到远程并删除旧分支:
git push origin -u new_name
它将本地分支设置为跟踪远程分支。
这解决了这个问题。
下载 Atlassian Sourcetree(免费)。导入存储库的本地克隆。在侧边栏中右键单击要重命名的分支。从上下文菜单中选择“重命名分支...”,然后重命名它。推到原点。
三个简单的步骤
git push origin 头部
git 分支 -m 旧分支名称 新分支名称
git push origin 头部
不定期副业成功案例分享
git push origin :old_branch new_branch
。这将删除旧分支并推送新分支。git branch -m new_branch
(将 old_branch 重命名为 new_branch)2.git commit -m 'msg'
,3.git push
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 Web UI 中删除,我可以选择“恢复”,所以推送 new_branch 似乎只是在恢复。