我有一个分支主机,它跟踪远程分支源/主机。
我想在本地和远程将它们重命名为master old。这可能吗?
对于跟踪origin/master(并且总是通过git pull更新本地主分支)的其他用户,在我重命名远程分支后会发生什么?他们的git pull是否仍然有效,或者它是否会抛出一个错误,即无法再找到原始/主文件?
接下来,我想创建一个新的主分支(本地和远程)。再次,在我这样做之后,如果其他用户执行git pull,现在会发生什么?
我想这一切都会带来很多麻烦。有没有一种干净的方法可以得到我想要的东西?还是我应该让master保持原样,创建一个新的分支master,然后继续工作?
2022年更新的解决方案
GitHub现在正式支持其用户重命名分支机构,并在GitHub Docs上提供指导。
我已经按照他们的步骤成功地重命名了我的本地和远程分支。
如果URL断开,下面是解决方案。
重命名远程分支
在GitHub.com上,导航到存储库的主页面。在文件列表上方,单击“分支”。在分支列表中,在要重命名的分支的右侧,单击编辑符号。键入分支的新名称并查看信息,然后单击“重命名分支”
在分支名称更改后更新本地克隆
根据GitHub文档:
在GitHub上重命名存储库中的分支后,任何具有存储库本地克隆的合作者都需要更新该克隆。
从计算机上存储库的本地克隆中,运行以下命令用于更新默认分支的名称:
$ git branch -m OLD-BRANCH-NAME NEW-BRANCH-NAME
$ git fetch origin
$ git branch -u origin/NEW-BRANCH-NAME NEW-BRANCH-NAME
$ git remote set-head origin -a
(可选)运行以下命令以删除对旧分支名称的跟踪引用:
$ git remote prune origin
有很多方法可以重命名分支机构,但我将重点放在更大的问题上:“如何让客户快速前进,而不必在本地处理分支机构”。
首先是一张快速图片:
这实际上很容易做到;但不要滥用它。整个想法取决于合并提交;因为它们允许快进,并将分支的历史与另一分支的历史联系起来。
重命名分支:
# rename the branch "master" to "master-old"
# this works even if you are on branch "master"
git branch -m master master-old
创建新的“主”分支:
# create master from new starting point
git branch master <new-master-start-point>
创建合并提交以具有父子历史记录:
# now we've got to fix the new branch...
git checkout master
# ... by doing a merge commit that obsoletes
# "master-old" hence the "ours" strategy.
git merge -s ours master-old
瞧。
git push origin master
这是因为创建合并提交允许将分支快速转发到新修订。
使用合理的合并提交消息:
renamed branch "master" to "master-old" and use commit ba2f9cc as new "master"
-- this is done by doing a merge commit with "ours" strategy which obsoletes
the branch.
these are the steps I did:
git branch -m master master-old
git branch master ba2f9cc
git checkout master
git merge -s ours master-old