git - Git从另一个分支如何完全替换掉主分支?

  显示原文与译文双语对照的内容

可能重复:
将当前分支更改为 git 中的master

我的git仓库中有两个分支:

  1. 母版
  2. seotweaks ( 最初由主控形状创建)

我创建了"seotweaks"很快合并回主人的意图,不过这是 3几个月前,这个分支中的代码是 13版本"母版"之前,它实际上已经成为我们的工作主分支的所有代码在"母版"现在或多或少地过时了。

我知道的非常糟糕的实践,教训。

你知道如何将"母版"分支的所有内容替换为"seotweaks"中的内容?

我可以删除"母版"和merge中的所有内容,但这并不像最佳实践。

时间:

你应该能够使用"我们的"合并策略以如下方式覆盖主控形状:


git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks

结果应该是你的主人现在基本上是 seotweaks 。

如何使用 git branch -m将主分支重命名为另一个分支,然后重命名seotweaks分支到主分支? 像这样:


git branch -m master old-master
git branch -m seotweaks master
git push -f origin master

你可以重命名/删除主在远程,但这将是一个问题,如果很多人有他们的工作基于远程主分支和拉,分支机构在当地的回购。
这可能不是这种情况,因为每个人都在使用分支'seotweaks'。

在这种情况下,你可以:
( 使 git remote --show 检查你的远程仓库中的远程声明如何声明) 。 我假设'origin')
( 关于 GitHub, house9的评论: "我必须做一个额外的步骤,单击GitHub上的'Admin'按钮并将'Default Branch'设置为'master'以外的东西,然后再把它放到后面"


git branch -m master master-old # rename master on local
git push origin :master # delete master on remote
git push origin master-old # create master-old on remote
git checkout -b master seotweaks # create a new local master on top of seotweaks
git push origin master # create master on remote

但是:

  • 如果其他用户试图拉主在远程删除时,他们将会失败("没有这样的裁判在远程")
  • 在远程主机上重新创建主控形状时,将尝试将新主机合并到其本地( 现在旧) 主机上: 大量的冲突。他们实际上需要将本地主机 reset --hard 连接到他们将要获取的远程/主分支,并忘记当前主机。

因为seotweaks最初是作为一个分支创建的,所以合并它是一个好主意。 但是如果你是在一个情况下你的一个分支并不是一个分支从主或你的历史是如此不同,你只是想消除主分支的新分支,你一直在做的工作你可以这样做:


git push [-f] origin seotweaks:master

如果你得到这个错误,这一点特别有用


! [remote rejected] master (deletion of the current branch prohibited)

你没有使用 github,也没有访问"管理"选项卡来更改远程仓库的默认分支。 此外,这不会造成时间或者争用条件,因为你可能会通过删除主控形状遇到:


git push origin :master

我发现这是最好的方式来做到这一点( 我有一个问题,我的服务器不允许我删除)

在主持源存储库的服务器上,从存储库的目录中键入以下内容:


git config receive.denyDeleteCurrent ignore

在你的工作站上:


git branch -m master vabandoned # rename master on local
git branch -m newBranch master # locally rename branch newBranch to master
git push origin :master # delete the remote's master
git push origin master:refs/heads/master # push the new master to the remote
git push origin abandoned:refs/heads/abandoned # push the old master to the remote

回到主持原始存储库的服务器上:


git config receive.denyDeleteCurrent true

贷记这里页面的作者

http://www.mslinn.com/blog/?p=772

...