【问题标题】:Overwrite master with develop用develop覆盖master
【发布时间】:2018-11-20 14:44:08
【问题描述】:

在我们的项目中,我们的主分支完全崩溃了。它认为它领先于一些提交,如果我们尝试合并开发,它会显示大量的冲突。它已经坏了很长时间了,所以在开发中发生了很多事情(太多的冲突无法解决)。

我想用develop覆盖master中的所有内容(所以master基本上等于develop)。我该怎么做?

我尝试在本地删除 master 中的所有内容,然后运行以下命令:

git checkout master
git reset --hard develop

似乎给了我所有正确的文件,但是当我尝试推送 master 时,我得到了这个错误:

Updates were rejected because the tip of your current branch is behind

【问题讨论】:

  • 请阅读How to Ask 并展示您的尝试。将该错误粘贴到您最喜欢的网络搜索引擎中并阅读结果。
  • @CodeCaster 如果您阅读我的问题,您可能会看到我说我已经尝试过的部分...
  • 您尝试了一件事,结果出现错误。我的意思是你试图解决这个错误。
  • @CodeCaster 您提出的重复问题与我遇到的问题不同。我的问题不是如何解决我在这个阶段遇到的错误,而是“我想用develop覆盖master中的所有内容”以及我该怎么做。在四处搜索时,我看到了许多关于如何做到这一点的不同建议——我没有找到一个似乎有效的明确答案。让我感到沮丧的是,在 SO 上有像你这样的人浪费每个人的时间来投票和试图关闭问题(尤其是不正确的重复票证)以及像谷歌这样的无用的 cmets。

标签: git merge git-merge merge-conflict-resolution


【解决方案1】:

我只想用develop 覆盖master 中的所有内容(所以master 基本上等于develop)。我该怎么做?

git-branch--force 选项可以做到这一点:

git checkout develop
git branch -f master develop

请注意在修改master 之前需要切换到不同的分支,因为git-branch 将拒绝更改当前分支。

或者,您可以使用git-update-ref plumbing command

git update-ref refs/heads/master refs/heads/develop

它允许您修改任何引用,无论HEAD 当前指向何处。请注意 git-update-ref 将参数视为 file paths relative to the .git directory

最后,您还需要使用git-push-f --force 选项来重写远程master 分支:

git push -f origin master

来自documentation

通常,“git push”拒绝更新不是用于覆盖它的本地引用的祖先的远程引用。

如果远程引用的当前值是预期值,则此选项会覆盖此限制。否则“git push”会失败。

【讨论】:

    【解决方案2】:

    你是如何推动大师的?在这种情况下,您无法进行常规推送。

    您是否尝试过使用git push -f 强制推送?强制推送将覆盖遥控器上的历史记录,应谨慎操作。

    -f
    --force
    通常,该命令拒绝更新不是用于覆盖它的本地引用的祖先的远程引用。此外,当使用 --force-with-lease 选项时,该命令拒绝更新当前值与预期值不匹配的远程 ref。

    此标志禁用这些检查,并可能导致远程存储库丢失提交;小心使用。

    注意 --force 适用于所有被推送的 refs,因此将它与 push.default 设置为匹配或配置为 remote.*.push 的多个推送目标一起使用可能会覆盖当前分支以外的 refs(包括本地严格落后于远程对应的参考)。要强制只推送到一个分支,请在 refspec 前使用 + 来推送(例如 git push origin +master 强制推送到主分支)。有关详细信息,请参阅上面的 ... 部分。

    来源:https://git-scm.com/docs/git-push

    【讨论】:

      【解决方案3】:

      你可以通过git checkout master去master并使用这个命令:

      git merge --strategy-option theirs develop
      

      如果有任何冲突,这将自动接受开发分支更改

      这是一个example

      选项2 - 您也可以转到develop 分支并删除master,然后像这样从develop 重新创建master:

      git checkout develop
      git branch -d master
      git push -f :master
      git checkout -b master
      

      请记住,如果您使用 gitlab 之类的东西,您必须先将远程存储库 Protected Branches 关闭为 master

      【讨论】:

        猜你喜欢
        • 2013-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        • 2019-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多