如果有一个存储库,我只有git://访问(通常只是推+拉),是否有一种方法重命名该存储库中的分支,以同样的方式,我将在本地用git branch -m?


当前回答

如果你真的只想远程重命名分支,而不同时重命名任何本地分支,你可以用一个命令来完成:

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

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

作为bash函数:

git-rename-remote-branch() {
  if [ $# -ne 3 ]; then
    echo "Rationale : Rename a branch on the server without checking it out."
    echo "Usage     : ${FUNCNAME[0]} <remote> <old name> <new name>"
    echo "Example   : ${FUNCNAME[0]} origin master release"
    return 1 
  fi

  git push $1 $1/$2\:refs/heads/$3 :$2
}

要整合@ksrb的评论:这基本上是在一个命令中进行两次推送,首先git push <remote> <remote>/<old_name>:refs/heads/<new_name>,以基于旧的远程跟踪分支推送一个新的远程分支,然后git push <remote>:<old_name>删除旧的远程分支。

其他回答

如果你真的只想远程重命名分支,而不同时重命名任何本地分支,你可以用一个命令来完成:

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

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

作为bash函数:

git-rename-remote-branch() {
  if [ $# -ne 3 ]; then
    echo "Rationale : Rename a branch on the server without checking it out."
    echo "Usage     : ${FUNCNAME[0]} <remote> <old name> <new name>"
    echo "Example   : ${FUNCNAME[0]} origin master release"
    return 1 
  fi

  git push $1 $1/$2\:refs/heads/$3 :$2
}

要整合@ksrb的评论:这基本上是在一个命令中进行两次推送,首先git push <remote> <remote>/<old_name>:refs/heads/<new_name>,以基于旧的远程跟踪分支推送一个新的远程分支,然后git push <remote>:<old_name>删除旧的远程分支。

按照以下步骤更改分支名称:

Git branch -m old_branchname new_branchname Git推送源:old_branchname new_branchname Git push——set-upstream origin new_branchname

之后取回原点

Git获取来源 Git远程删除源文件

如果你在用Github…

你可以使用github.com上的UI创建一个基于旧名称分支的新分支:

当然。只需在本地重命名分支,推送新分支,并推送旧分支的删除。

唯一真正的问题是存储库的其他用户不会重命名本地跟踪分支。

你只需要用你想要的名字创建一个新的本地分支,把它推到你的远程,然后删除旧的远程分支:

$ 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时,你会得到错误“禁止删除当前分支”。