重命名本地和远程Git存储库的主分支

我有分支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配置值设置为warnignore远程存储库来覆盖此设置。 否则,如果您准备立即创建一个新的主文件,请跳过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
    
    链接地址: http://www.djcxy.com/p/309.html

    上一篇: Rename master branch for both local and remote Git repositories

    下一篇: color}" works in HTML but not in CSS