我有一个分支主机,它跟踪远程分支源/主机。

我想在本地和远程将它们重命名为master old。这可能吗?

对于跟踪origin/master(并且总是通过git pull更新本地主分支)的其他用户,在我重命名远程分支后会发生什么?他们的git pull是否仍然有效,或者它是否会抛出一个错误,即无法再找到原始/主文件?

接下来,我想创建一个新的主分支(本地和远程)。再次,在我这样做之后,如果其他用户执行git pull,现在会发生什么?

我想这一切都会带来很多麻烦。有没有一种干净的方法可以得到我想要的东西?还是我应该让master保持原样,创建一个新的分支master,然后继续工作?


当前回答

关于:

git checkout old-branch-name
git push remote-name new-branch-name
git push remote-name :old-branch-name
git branch -m new-branch-name

其他回答

关于:

git checkout old-branch-name
git push remote-name new-branch-name
git push remote-name :old-branch-name
git branch -m new-branch-name

转到github.com或其任何位置,单击分支并重命名它。然后在本地运行这些命令:

git branch -m <old-branch-name> <new-branch-name>
git fetch origin
git branch -u origin/<new-branch-name> <new-branch-name>

这是我所知道的最简单、最“可读”的方式:

使用-m“移动”本地分支

git branch -m my_old_branch_name my_new_branch_name

将“已移动”分支推到远程,使用-u设置“上游”

git push origin -u my_new_branch_name

设置“upstream”实际上是将本地分支“连接”到远程,这样像fetch、pull和push这样的操作就可以工作了。

从远程删除旧分支

git push origin -D <old_name>

您的本地分支已经不存在了,因为您在第一步中“移动”了它。

git checkout -b new-branch-name
git push remote-name new-branch-name :old-branch-name

在删除旧分支名称之前,您可能必须手动切换到新分支名称

可以将以下内容保存到shell脚本中以执行该作业:

例如:

remote="origin"

if [ "$#" -eq 0 ] # if there are no arguments, just quit
then
    echo "Usage: $0 oldName newName or $0 newName" >&2
    exit 1
elif
    [ "$#" -eq 1 ] # if only one argument is given, rename current branch
then
    oldBranchName="$(git branch | grep \* | cut -d ' ' -f2)" #save current branch name
    newBranchName=$1
else
    oldBranchName=$1
    newBranchName=$2
fi

git branch -m $oldBranchName $newBranchName

git push $remote :$oldBranchName # Delete old branch on remote
git push --set-upstream $remote $newBranchName # Add new branch name on remote and track it

请注意,这里的默认远程名称“origin”是硬编码的。您可以扩展脚本以使其可配置!

然后,该脚本可以与Bash别名、Git别名一起使用,或者在Sourcetree自定义操作中使用。