VS2019 RC4提交GitHub失败,如何不拉取远程提交并覆盖本地错误提交?
解决方案:放弃本地错误提交,用指定版本覆盖并推送(无需拉取远程)
没问题,我来帮你搞定这个场景!首先咱们先理清楚核心需求:扔掉本地那两个错误的提交(2019.03.27下午、2019.03.28上午),用你手里的「2019.03.30」版本直接覆盖,同时跳过拉取远程提交的步骤。下面分两种操作方式,你选顺手的来:
方式一:用命令行快速操作(推荐)
第一步:先把正确版本提交到本地
确保你当前工作区的代码就是「2019.03.30」的正确版本,没有未保存的修改。然后打开终端(VS2019里可以直接打开Git Bash),执行:
git add . git commit -m "2019.03.30: 最终正确版本"
第二步:移除错误提交的历史
假设那两个错误提交是最近的2个(加上刚提交的正确版本,总共3个提交),执行交互式变基命令:
git rebase -i HEAD~3
这会弹出一个文本编辑器,里面会列出最近3条提交记录。找到那两个错误提交的行,把开头的pick改成drop,然后保存退出(比如Vim里按:wq,Notepad++直接保存关闭)。
完成后,你的本地提交历史就只剩下错误提交之前的基础版本,加上刚提交的正确版本了。
第三步:强制推送到远程
因为本地历史已经和远程不一样了,必须用强制推送覆盖远程(重要提醒:如果远程分支有其他人的提交,这么做会直接丢失他们的工作,一定要确认没人在这个分支上干活!):
git push origin main --force-with-lease
用--force-with-lease比直接--force更安全,它会先检查远程分支有没有被其他人修改过,如果有就会终止推送,避免误删别人的工作。
方式二:用Visual Studio 2019图形界面操作
如果你不习惯命令行,VS2019也能完成这些操作:
- 打开「团队资源管理器」,切换到「提交」标签页,点击右上角的「查看历史记录」。
- 找到那两个错误提交的前一个正确提交(也就是错误提交之前的版本),右键点击它,选择「重置」→「硬重置」。这会把本地分支和工作区直接回滚到那个正确的基础版本。
- 回到「更改」标签页,把你手里的「2019.03.30」版本的所有修改选中,点击「提交」,填写提交信息后完成提交。
- 切换到「同步」标签页,点击「推送」。如果VS提示远程历史和本地冲突,找到「选项」里的强制推送开关(可能需要在设置里开启),选择强制推送即可。
关键注意事项
- 强制推送是把双刃剑:如果远程分支上有其他同事的提交,这么做会彻底覆盖掉他们的工作,所以执行前一定要确认这个分支只有你在使用,或者已经和团队沟通好可以覆盖历史。
- 你之前提交失败的原因是远程有未合并的提交,用上面的方法跳过拉取直接推送,本质是用本地的新历史完全替换远程的历史,所以一定要确保这是你想要的结果。
内容的提问来源于stack exchange,提问作者102425074
相关产品推荐
相关产品推荐

