git:重命名远程分支?

如果有一个存储库,我只有git://访问(通常只是推+拉),有没有一种方法来重新命名在该存储库中的分支机构,就像我本地使用git branch -m

您只需使用所需的名称创build一个新的本地分支,将其推送到您的远程,然后删除旧的远程分支:

 $ git branch new-branch-name origin/old-branch-name $ git push origin --set-upstream new-branch-name $ git push origin :old-branch-name 

然后,要查看旧的分支名称,存储库的每个客户端都必须这样做:

 $ git fetch origin $ git remote prune origin 

注意:如果您的旧分支是您的主分支,您应该更改您的主分支设置。 否则,当你运行$ git push origin :old-branch-name ,会出现错误“禁止删除当前分支” 。

如果您真的只想远程重命名分支, 而不必同时重命名任何本地分支,则可以使用单个命令执行此操作:

 git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name> 

我写了这个脚本( git-rename-remote-branch ),它提供了一个方便的快捷方式来轻松地完成上述操作。

要集成@ ksrb的评论 :这基本上是两个推入一个单一的命令,首先git push <remote> <remote>/<old_name>:refs/heads/<new_name>推新的远程分支基于旧的远程跟踪分支,然后git push <remote> :<old_name>删除旧的远程分支。

首先检查你想重命名的分支

 git branch -m old_branch new_branch git push -u origin new_branch 

从远程删除旧分支:

 git push origin :old_branch 

当然。 只要在本地重新命名分支,然后推新的分支,并推动旧的删除。 唯一真正的问题是,回购的其他用户将不会重命名本地跟踪分支。

我不知道这是对还是错,但是我把分支的“老名字”推到分支的“新名字”上,然后用下面两行完全删除旧分支:

 git push origin old_branch:new_branch git push origin :old_branch 

添加已经给出的答案,这里是一个版本,首先检查新的分支是否已经存在(所以你可以安全地在脚本中使用它)

 if git ls-remote --heads "$remote" \ | cut -f2 \ | sed 's:refs/heads/::' \ | grep -q ^"$newname"$; then echo "Error: $newname already exists" exit 1 fi git push "$oldname" "$remote/$oldname:refs/heads/$newname" ":$oldname" 

(检查是从这个答案 )