我有分支master
跟踪远程分支origin/master
。
我想将它们重命名为本地和远程master-old
。那可能吗?对于跟踪origin/master
(以及谁总是通过git pull
更新其本地master
分支)的其他用户,在重命名远程分支后会发生什么?他们的git pull
继续工作还是会抛出一个错误,它无法找到origin/master
?
然后,继续,我想创建一个新的master
分支(本地和远程)。再一次,在我这样做之后,如果其他用户做git pull
会发生什么呢?
我想这一切都会带来很多麻烦。是否有一种干净的方式来获得我想要的东西?或者我应该离开master
,因为它是创造一个新的分支master-new
,只是在那里工作进一步上?
最接近重命名的是删除然后在遥控器上重新创建。例如:
git branch -m master master-old
git push remote :master # delete master
git push remote master-old # create master-old on remote
git checkout -b master some-ref # create a new local master
git push remote master # create master on remote
然而,这有很多警告。首先,没有现成的检出会了解重命名 - Git 并不试图跟踪分支重命名。如果新的master
服务器还不存在,git pull 将会出错。如果新master
已创建。拉动将尝试合并master
和master-old
。所以这通常是一个坏主意,除非你得到了之前检查过存储库的每个人的合作。
注意:默认情况下,较新版本的 git 不允许您远程删除主分支。您可以通过将receive.denyDeleteCurrent
配置值设置为在远程存储库上warn
或ignore
来覆盖此设置。否则,如果您已准备好立即创建新主服务器,请跳过git push remote :master
步骤,并将--force
传递给git push remote master
步骤。请注意,如果您无法更改遥控器的配置,则无法完全删除主分支!
此警告仅适用于当前分支(通常是master
分支); 任何其他分支都可以删除并重新创建,如上所述。
假设你目前在master
:
git push origin master:master-old # 1
git branch master-old origin/master-old # 2
git reset --hard $new_master_commit # 3
git push -f origin # 4
master
提交在origin
存储库中创建一个master-old
分支。 origin/master-old
分支创建一个新的本地分支(它将自动正确设置为跟踪分支)。 master
指向您希望它指向的任何提交。 origin
存储库中强制更改master
以反映您的新本地master
。 (如果您以任何其他方式执行此操作,则至少需要再执行一个步骤,以确保正确设置master-old
以跟踪origin/master-old
。撰写本文时发布的其他解决方案均不包括此内容。 )
使用 Git v1.7,我认为这已经略有改变。现在,更新本地分支对新远程的跟踪引用非常简单。
git branch -m old_branch new_branch # Rename branch locally
git push origin :old_branch # Delete the old branch
git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote