关于合并:如何完全从另一个分支替换Git中的主分支?

How to replace master branch in Git, entirely, from another branch?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Make the current Git branch a master branch

我的Git存储库中有两个分支:

  • master
  • seotweaks(最初由master创建)
  • 我创建了seotweaks,目的是快速将其合并回master。然而,那是三个月前的事了,这个分支中的代码比master早13个版本。

    由于master中的所有代码或多或少都已过时,因此它实际上已成为我们的工作主分支。

    我知道非常糟糕的做法,吸取了教训。

    你知道我如何用seotweaks中的内容替换master分支的所有内容吗?

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


    您应该能够使用"我们的"合并策略用如下SEOtweaks覆盖master:

    1
    2
    3
    4
    git checkout seotweaks
    git merge -s ours master
    git checkout master
    git merge seotweaks

    结果应该是你的主人现在基本上是搜索引擎优化。

    (-s ours--strategy=ours的缩写)

    从有关"我们的"战略的文档中:

    This resolves any number of heads, but the resulting tree of the merge is always that of the current branch head, effectively ignoring all changes from all other branches. It is meant to be used to supersede old development history of side branches. Note that this is different from the -Xours option to the recursive merge strategy.


    使用git branch-m将主分支重命名为另一个分支,然后将seothages branch重命名为master怎么样?像这样:

    1
    2
    3
    git branch -m master old-master
    git branch -m seotweaks master
    git push -f origin master

    这可能会删除源站主服务器中的提交,请在运行git push -f origin master之前检查您的源站主服务器。


    您可以在远程上重命名/删除master,但如果许多人将工作基于远程master分支,并在本地repo中删除了该分支,则这将是一个问题。这里可能不是这样,因为每个人似乎都在研究"EDOCX1"(1)分支。

    在这种情况下,您可以:Git-Remote——显示可能不工作。(制作一个EDOCX1[2]来检查如何在本地报告中声明您的遥控器。我假设‘origin’)(关于GitHub,House9评论道:"我还需要做一个额外的步骤,点击GitHub上的‘Admin’按钮,将‘Default Branch’设置为‘master’以外的东西,然后再放回去。"

    1
    2
    3
    4
    5
    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:许多冲突。实际上,他们需要将本地主服务器的cx1(7)发送到他们将要获取的远程/主服务器分支,并忘记当前的主服务器。


    由于seotweaks最初是作为master的分支创建的,因此将其重新合并是一个好主意。但是,如果您的某个分支机构实际上不是来自master的分支机构,或者您的历史如此不同,以至于您只想删除master分支机构以支持您正在进行工作的新分支机构,那么可以这样做:

    1
    git push [-f] origin seotweaks:master

    如果出现以下错误,这将特别有用:

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

    而且您没有使用github,也没有访问"管理"选项卡来更改远程存储库的默认分支。此外,这不会导致停机或比赛条件,因为您可能会遇到删除主机:

    1
    git push origin :master


    我发现这是最好的方法(我的服务器有问题,不允许我删除)。

    在托管origin存储库的服务器上,从存储库内的目录中键入以下内容:

    1
    git config receive.denyDeleteCurrent ignore

    在您的工作站上:

    1
    2
    3
    4
    5
    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存储库的服务器上:

    1
    git config receive.denyDeleteCurrent true

    感谢博客文章作者http://www.mslinn.com/blog/?P=772