用develop覆盖master

Coo*_*oop 2 git merge git-merge merge-conflict-resolution

在我们的项目中,主分支完全崩溃了。它认为它领先一些承诺,如果我们尝试合并开发,则表明存在大量冲突。它已经被打破很长时间了,所以开发中发生了很多事情(解决了太多冲突)。

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

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

git checkout master
git reset --hard develop
Run Code Online (Sandbox Code Playgroud)

似乎给我所有正确的文件,但是当我尝试推送主文件时,出现此错误:

Updates were rejected because the tip of your current branch is behind
Run Code Online (Sandbox Code Playgroud)

Enr*_*lio 9

我想只是简单地覆盖一切masterdevelop(所以master基本上等于develop)。我该怎么做呢?

--force的选项git-branch将恰恰如此:

git checkout develop
git branch -f master develop
Run Code Online (Sandbox Code Playgroud)

请注意,在修改之前master,您需要如何切换到其他分支,因为git-branch它将拒绝更改当前分支。

另外,您可以使用plumbing命令git-update-ref

git update-ref refs/heads/master refs/heads/develop
Run Code Online (Sandbox Code Playgroud)

这样,无论HEAD当前指向何处,您都可以修改任何参考。请注意,git-update-ref会将参数视为相对于.git目录的文件路径

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

git push -f origin master
Run Code Online (Sandbox Code Playgroud)

文档中

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

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


Ken*_*sen 1

你如何努力成为大师?在这种情况下,您无法进行常规推送。

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

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

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

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

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