首页 > 解决方案 > 如何在 Visual Studio 2019 中强制推送?

问题描述

注意:此问题的标题已根据执行后更新遥控器的意图进行了更改git reset --hard。对于上下文,这个问题的原始标题是:

如何在 Visual Studio 中重置为之前的 Git 提交并获取远程分支以反映更改?

我知道以前有人问过这个问题,但我仍然无法正常工作。

我需要摆脱两个提交。所以我从树的顶部开始:BadCommit 1 BadCommit 2 GoodCommit

在 VS 2019 中,我右键单击 GoodCommit -> 重置 -> 删除更改

它在本地重置为 GoodCommit。但是,如果我尝试将其推送到存储库,我会收到一条消息,指出本地分支位于远程分支之后。如果我拉和推,我就会回到我开始的地方,上面有 2 个 BadCommit。

如何让远程分支回到 GoodCommit?

标签: gitvisual-studiogithubgit-commit

解决方案


每当您在远程替换提交时,您不能只是push,您需要强制 push。下面我将解释如何从 Visual Studio 2019(包括 VS 2017 的新方式和旧方式)和命令行强制推送。我将从命令行开始,以解释可以强制推送的不同方式:

  1. git push --force# 删除服务器上的这个分支,并用我本地分支上的任何提交替换它
  2. git push --force-with-lease# 删除服务器上的这个分支并将其替换为我本地分支上的任何提交,但前提是分支上没有我尚未获取的新提交
  3. git push --force-if-includes# 删除服务器上的这个分支并将其替换为我本地分支上的任何提交,但前提是我的 reflog 中有远程提示提交。这是一个相对较新的选项,在此处进行了更详细的描述。

我强烈建议大多数时候使用 #2,这也是 Visual Studio 在 VS 中强制推送时所做的事情。要在 Visual Studio 2019 中启用强制推送,请转到 Git 主菜单,选择设置(或工具菜单、选项),选择源代码控制,然后选择 Git 全局设置:

VS2019 Git 设置

然后选中“启用推送--force-with-lease”复选框:

如何启用强制推送

启用该设置后,下次您尝试推送并且您的分支已经分歧时,您将看到一个新选项:

显示强制推送选项

单击“强制推送”按钮与运行命令行相同:

git push --force-with-lease

注意: VS2019 中的 Git 菜单是新的。如果您没有看到它,并且想尝试它,您可以从工具->选项中启用它,选择环境,预览功能,然后选中“新 Git 用户体验”框:

如何启用新的 Git 菜单

同样,如果您选中它但不喜欢它,取消选中该框将设置 Git,就像它过去在 Visual Studio 2017 的团队资源管理器中一样。

如果您没有启用 Git 菜单(或者您使用的是 VS 2017),则可以在团队资源管理器、设置、Git 全局设置中找到强制推送设置,然后选中“启用推送 --force”复选框。

请注意,--force您在屏幕上看到的是 VS2019 和 VS2017 中 Team Explorer 中的拼写错误,它实际上是--force-with-lease

在此处输入图像描述


推荐阅读