这个问题在这里已经有了答案:Make the current Git branch a master branch (17 answers) 2年前关闭。
我的 Git 存储库中有两个分支:
大师 seotweaks(最初由大师创建)
我创建 seotweaks
的目的是快速将其合并回 master
。然而,那是三个月前的事了,这个分支中的代码比 master
早了 13 个版本。
它实际上已成为我们的工作主分支,因为 master
中的所有代码现在或多或少已经过时了。
我知道的非常糟糕的做法,吸取了教训。
您知道如何将 master
分支的所有内容替换为 seotweaks
中的内容吗?
我可以删除 master
中的所有内容并合并,但这感觉不是最佳做法。
您应该能够使用“我们的”合并策略来使用 seotweaks 覆盖 master,如下所示:
git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks
结果应该是你的主人现在基本上是 seotweaks。
(-s ours
是 --strategy=ours
的缩写)
来自 the docs 关于“我们的”策略:
这解决了任意数量的头,但合并的结果树始终是当前分支头的树,有效地忽略了所有其他分支的所有更改。它旨在用于取代分支的旧开发历史。请注意,这与递归合并策略的 -Xours 选项不同。
评论更新:如果你遇到致命错误:refusing to merge unrelated histories
,则将第二行更改为:git merge --allow-unrelated-histories -s ours master
使用 git branch -m 将 master 分支重命名为另一个分支,然后将 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
master
分支中的提交。而 ergosys 的解决方案进行了适当的合并,因此保留了 master
中的所有历史记录。
git checkout old-master && git push origin old-master
用旧主人创建一个分支。
您可以在远程重命名/删除 master,但如果很多人将他们的工作基于远程 master 分支并将该分支拉到本地 repo 中,这将是一个问题。
这里可能不是这种情况,因为每个人似乎正在处理分支“seotweaks
”。
在这种情况下,您可以:
git remote --show 可能不起作用。 (创建一个 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
但又一次:
如果其他用户在远程删除 master 时尝试拉取,他们的拉取将失败(“远程没有这样的参考”)
当 master 在远程重新创建时,pull 将尝试将该新 master 合并到其本地(现在是旧的)master 上:很多冲突。他们实际上需要将 --hard 本地 master 重置为他们将获取的 remote/master 分支,并忘记他们当前的 master。
git push -f origin :master
。
由于 seotweaks
最初是作为 master
的一个分支创建的,因此将其重新合并是一个好主意。但是,如果您的某个分支实际上不是来自 master
的分支,或者您的历史非常不同,以至于您只想删除 master
分支以支持您一直在做的新分支你的工作可以做到这一点:
git push [-f] origin seotweaks:master
如果您收到此错误,这将特别有用:
! [remote rejected] master (deletion of the current branch prohibited)
而且您没有使用 GitHub,也无权访问“管理”选项卡来更改远程存储库的默认分支。此外,这不会导致您在删除 master 时可能遇到的停机时间或竞争条件:
git push origin :master
force push
之后的 master
git 历史记录如何?它是否会覆盖 master
上的所有文件,即使它们在 seotweaks
上没有更改?
我发现这是最好的方法(我的服务器出现问题,不让我删除)。
在托管 origin
存储库的服务器上,从存储库内的目录中键入以下内容:
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
返回托管 origin
存储库的服务器:
git config receive.denyDeleteCurrent true
感谢博文http://www.mslinn.com/blog/?p=772的作者
不定期副业成功案例分享
fatal: refusing to merge unrelated histories
,则将第二行更改为:git merge --allow-unrelated-histories -s ours master