git - 如何在 Visual Studio 2019 中强制推送?
问题描述
注意:此问题的标题已根据执行后更新遥控器的意图进行了更改git reset --hard
。对于上下文,这个问题的原始标题是:
如何在 Visual Studio 中重置为之前的 Git 提交并获取远程分支以反映更改?
我知道以前有人问过这个问题,但我仍然无法正常工作。
我需要摆脱两个提交。所以我从树的顶部开始:BadCommit 1 BadCommit 2 GoodCommit
在 VS 2019 中,我右键单击 GoodCommit -> 重置 -> 删除更改
它在本地重置为 GoodCommit。但是,如果我尝试将其推送到存储库,我会收到一条消息,指出本地分支位于远程分支之后。如果我拉和推,我就会回到我开始的地方,上面有 2 个 BadCommit。
如何让远程分支回到 GoodCommit?
解决方案
每当您在远程替换提交时,您不能只是push,您需要强制 push。下面我将解释如何从 Visual Studio 2019(包括 VS 2017 的新方式和旧方式)和命令行强制推送。我将从命令行开始,以解释可以强制推送的不同方式:
git push --force
# 删除服务器上的这个分支,并用我本地分支上的任何提交替换它git push --force-with-lease
# 删除服务器上的这个分支并将其替换为我本地分支上的任何提交,但前提是分支上没有我尚未获取的新提交git push --force-if-includes
# 删除服务器上的这个分支并将其替换为我本地分支上的任何提交,但前提是我的 reflog 中有远程提示提交。这是一个相对较新的选项,在此处进行了更详细的描述。
我强烈建议大多数时候使用 #2,这也是 Visual Studio 在 VS 中强制推送时所做的事情。要在 Visual Studio 2019 中启用强制推送,请转到 Git 主菜单,选择设置(或工具菜单、选项),选择源代码控制,然后选择 Git 全局设置:
然后选中“启用推送--force-with-lease”复选框:
启用该设置后,下次您尝试推送并且您的分支已经分歧时,您将看到一个新选项:
单击“强制推送”按钮与运行命令行相同:
git push --force-with-lease
注意: VS2019 中的 Git 菜单是新的。如果您没有看到它,并且想尝试它,您可以从工具->选项中启用它,选择环境,预览功能,然后选中“新 Git 用户体验”框:
同样,如果您选中它但不喜欢它,取消选中该框将设置 Git,就像它过去在 Visual Studio 2017 的团队资源管理器中一样。
如果您没有启用 Git 菜单(或者您使用的是 VS 2017),则可以在团队资源管理器、设置、Git 全局设置中找到强制推送设置,然后选中“启用推送 --force”复选框。
请注意,--force
您在屏幕上看到的是 VS2019 和 VS2017 中 Team Explorer 中的拼写错误,它实际上是--force-with-lease
:
推荐阅读
- java - 什么是 android studio 中的“ClassCastException”错误
- css - Angular ngx-swiper-wrapper 箭头样式更改
- opengl - 3D 点到屏幕位置。在OpenGL中丢弃相机后面的点
- r - 如何从 Rcpp 函数中并行调用用户定义的 R 函数?
- list - SwiftUI - 我想删除“后退按钮”和 .navigationbartitle 之间的空格
- swift - 结构数组的奇怪内存行为
- java - (Weblogic 12c)来自 RFC 2068 10.5.1 500 Internal Server Error while execution request from Soap ui
- javascript - onClick 不会触发事件 React.js
- java - 无法解决“Gradle Sync 失败”
- javascript - 是否有一个全局浏览器对象我可以添加一个侦听器来捕获所有抛出的错误?