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

git branch -m oldname newname

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


当前回答

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

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

解释:

重命名步骤:

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

删除步骤:

Git参考: 找到一个与experimental in匹配的ref 原始存储库(例如refs/heads/experimental),并删除它。

远程存储库步骤的更新(用于跟踪的上游参考):

Git参考: 对于每个最新或成功推送的分支,添加upstream (tracking)引用,由less参数使用 Git-pull[1]等命令。有关更多信息,请参见 分支。<名称>。在git-config[1]中合并。

其他回答

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

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

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

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

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

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

解释:

重命名步骤:

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

删除步骤:

Git参考: 找到一个与experimental in匹配的ref 原始存储库(例如refs/heads/experimental),并删除它。

远程存储库步骤的更新(用于跟踪的上游参考):

Git参考: 对于每个最新或成功推送的分支,添加upstream (tracking)引用,由less参数使用 Git-pull[1]等命令。有关更多信息,请参见 分支。<名称>。在git-config[1]中合并。

如前所述,在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推送源: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

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

导航您的项目目录。 将.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和源/远程服务器上的头和远程。

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


注意

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

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

. /文献/头/敬畏/一些/分支 . /文献/遥控器/ [all-remote-names] /敬畏/一些/分支

祝愿分支-name: "new-branch-name"

导航您的项目目录。 从.git/refs/*/awe/some/中复制分支文件。 把它放在。git/refs/head/中。 从所有的。git/refs/remotes/*/awe/some/中复制分支文件。 把它们放在。git/refs/remotes/*/中。 将所有复制的分支文件重命名为new-branch-name。 检查目录和文件结构现在看起来是否像这样:

. / /头/ new-branch-name。参考文献 . /文献/遥控器/ [all-remote-names] / new-branch-name

对所有远程源/服务器(如果存在的话)执行同样的操作

信息:在远程服务器上通常没有refs/remotes/*目录,因为你已经在远程服务器上;)(好吧,也许在高级Git配置中这是可能的,但我从未见过)

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

branch-name中的目录被移除。


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