在我们的项目中,我们的主分支完全破碎了。它认为它提前了一些提交,如果我们尝试合并开发,它会显示出大量的冲突。它已经被打破了很长一段时间,所以在开发过程中发生了很多事情(要解决太多的冲突)。
我想用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
答案 0 :(得分:6)
我想用
master
覆盖develop
中的所有内容(所以master
基本上等于develop
)。我该怎么做?
--force
的git-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 --force
的git-push
选项来重写远程master
分支:
git push -f origin master
通常,“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以强制推送到主分支)。有关详细信息,请参阅上面的...部分。
答案 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