如何从另一个分支完全replacegit中的master分支?

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

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

  1. seotweaks(最初由高手创build)

我创build了seotweaks ,意图将其快速合并回master ,不过这是3个月前的事情,而且这个分支中的代码比master代码早13个版本,因为主代码中的所有代码更多,所以它已经成为我们的工作主分支。现在不太陈旧了。

我知道很不好的做法,经验教训。

你知道我可以用seotweaks所有内容来replacemaster分支的所有内容吗?

我可以删除master和merge中的所有内容,但这并不是最佳实践。

你应该能够使用“我们”的合并策略来覆盖像这样的seotweaks的主人:

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

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

( – -s ours是 – --strategy=ours简称)

从关于“我们的”战略的文件来看:

这解决了任何数量的头,但合并结果树始终是当前分支头的树,有效地忽略所有其他分支的所有更改。 它是用来取代分支机构的旧发展历史。 请注意,这与recursion合并策略的-Xours选项不同。

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

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

这可能会删除原始主机中的提交 ,请在运行git push -f origin master之前检查您的git push -f origin master

您可以重命名/删除远程主服务器上的主服务器,但是如果有很多人在远程主服务器上进行了工作并将其分支放在本地回购站中,则会造成问题。
这可能不是这种情况,因为每个人似乎都在分支机构的“ seotweaks ”上工作。

在这种情况下,您可以:
git远程 – 显示可能无法正常工作。 (做一个git remote show来检查你的远程是如何在你的本地repo中声明的,我将假设' origin ')
(关于GitHub, house9的评论:“我不得不做一个额外的步骤,点击GitHub上的' Admin 'button,将' 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 

但是,

  • 如果其他用户在远程删除主服务器时尝试拉取,则其拉取操作将失败(“无此远程访问”)
  • 当在远程重新创build主机时,下拉将试图在他们的本地(现在是旧的)主机上合并新的主机:大量的冲突。 他们实际上需要reset --hard把他们当地的主人reset --hard他们reset --hard的远程/主分支,而忘记他们当前的主人。

因为seotweaks最初是作为主人的一个分支创build的,所以把它合并回来是个好主意。 然而,如果你处于一种情况,即你的一个分支不是真正的主人分支,或者你的历史是如此不同,你只是想要抹去主分支来支持你一直在做的工作可以这样做:

 git push [-f] origin seotweaks:master 

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

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

而且您没有使用github,也无法访问“pipe理”选项卡来更改远程回购的默认分支。 此外,这不会像删除主人所遇到的那样造成停机时间或竞赛状况:

 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 

回到托pipe源存储库的服务器上:

 git config receive.denyDeleteCurrent true 

信贷给这个页面的作者

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