代码之家  ›  专栏  ›  技术社区  ›  Jason

如何从另一个分支完全替换Git中的主分支[[副本]

  •  1404
  • Jason  · 技术社区  · 14 年前

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

    1. master
    2. seotweaks 主人 )

    打算很快把它合并回 主人 . 然而,那是三个月前的事了,这个分支中的代码比以前提前了13个版本 主人

    它实际上已经成为我们工作的主分支,就像所有的代码一样 主人 现在或多或少已经过时了。

    你知道我怎样才能把书的所有内容都换掉吗 主人 分支机构 塞奥特维克 ?

    主人 合并,但这并不是最佳实践。

    5 回复  |  直到 6 年前
        1
  •  3105
  •   Dale K    5 年前

    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 merge --allow-unrelated-histories -s ours master

        2
  •  532
  •   ZelluX    8 年前

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

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

    ,请在运行前检查您的原始主机 git push -f origin master .

        3
  •  81
  •   Community CDub    7 年前


    这里可能不是这样,因为每个人似乎都在为分支机构的工作 seotweaks '.


    (打个招呼) git remote show 检查您的远程设备是如何在本地repo中声明的。我会假设 origin ')
    (关于GitHub, house9 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 他们的本地主服务器将连接到他们将要获取的远程/主服务器分支,并且忘记他们当前的主服务器。
        4
  •  40
  •   Peter Mortensen icecrime    6 年前

    seotweaks 最初是作为来自的分支创建的 master 主人 分支支持您一直在做的新分支您可以这样做:

    git push [-f] origin seotweaks:master
    

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

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

    git push origin :master
    
        5
  •  7
  •   Peter Mortensen icecrime    6 年前

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

    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
    

    回到托管 起源 存储库:

    git config receive.denyDeleteCurrent true
    

    博客作者的功劳 http://www.mslinn.com/blog/?p=772