如何在 Visual Studio 中强制推送?

Ric*_*ico 11 git github visual-studio git-commit

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

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

我知道之前已经有人问过这个问题,但我仍然无法让事情正常进行。

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

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

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

如何将远程分支恢复到 GoodCommit?

TTT*_*TTT 21

更新:此答案包括有关 Visual Studio 2022、2019 和 2017 中强制推送的说明。

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

  1. git push --force# 删除服务器上的这个分支,并将其替换为本地分支上的任何提交
  2. git push --force-with-lease# 清除服务器上的这个分支,并将其替换为本地分支上的任何提交,但前提是该分支上没有我尚未获取的新提交
  3. git push --force-with-lease --force-if-includes# 吹走服务器上的这个分支,并将其替换为本地分支上的任何提交,但前提是该分支上没有我尚未获取的新提交,并且只有当我的本地分支中有远程提示提交时重新记录。这是一个相对较新的选项,在这里有更详细的描述。

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

VS2019 Git 设置

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

如何启用强制推送

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

显示强制推送选项

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

git push --force-with-lease

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

如何启用新的 Git 菜单

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

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

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

在此输入图像描述

  • 太感谢了!你真的救了我的培根。抱歉,我没能早点回复——刚刚回去工作。这非常有效。 (2认同)
  • 说真的 - 我真的感谢您花时间制作所有屏幕截图并使其非常清晰。 (2认同)