Visual Studio 2019 你是怎么强推的?

How do you force push in Visual Studio 2019?

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

How do I reset to a prior Git commit in Visual Studio and get the remote branch to reflect the changes?

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

我需要删除两个提交。所以从树的顶部我有: 错误提交 1 错误提交 2 好提交

在 VS 2019 中,我 right-click GoodCommit -> 重置 -> 删除更改​​

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

如何将远程分支返回到 GoodCommit?

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

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

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

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

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

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

git push --force-with-lease

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

同样,如果您选中它但不喜欢它,取消选中该框将设置 Git 就像它在 Visual Studio 2017 年在 Team Explorer 中一样。

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

请注意,您在屏幕上看到的 --force 是 VS2019 和 VS2017 中团队资源管理器中的拼写错误,它实际上是 --force-with-lease: