用开发覆盖master

时间:2018-06-11 10:58:44

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

在我们的项目中,我们的主分支完全破碎了。它认为它提前了一些提交,如果我们尝试合并开发,它会显示出大量的冲突。它已经被打破了很长一段时间,所以在开发过程中发生了很多事情(要解决太多的冲突)。

我想用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

3 个答案:

答案 0 :(得分:6)

  

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

--forcegit-branch选项将完全符合以下条件:

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

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

git push -f origin master

来自documentation

  

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

     

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

答案 1 :(得分:1)

你是如何推动掌握的?在这种情况下,你无法定期推动。

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

  

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

     

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

     

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

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

答案 2 :(得分:1)

你可以通过presto-cli-*-executable.jar*去掌握并使用这个命令:

git checkout master

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

这是example

option2 - 您也可以转到git merge --strategy-option theirs develop 分支并移除develop,然后从开发中重新创建master,如下所示:

master

请记住,如果您使用类似gitlab的内容,则必须首先关闭git checkout develop git branch -d master git push -f :master git checkout -b master 的远程存储库Protected Branches