GitHub仓库遭第三方错误合并 如何回滚并推送本地代码
核心结论
不需要SSH登录GitHub服务器,也不用在网页端找回滚按钮,本地Git操作就能直接清除远程的错误合并提交,全程不需要把远程的错误变更合并到你的本地环境。
报错原因
执行git push -u origin master被拒,是因为远程master分支比你本地多了哈希为zzzzzzz的错误合并提交,Git默认的非快进推送保护机制会阻止直接推送,提示你先拉取合并。既然你确认该提交是误操作、完全不需要保留,直接覆盖远程分支指针即可。
最快解决方案
- 先在本地仓库执行
git status,确认你本地master分支的所有代码修改都已提交,工作区干净,当前版本就是你要保留的正确版本。 - 直接执行强制推送命令:
git push -f origin master
注意:参数
-f是force push的缩写,执行后远程master分支会和你本地master分支完全对齐,那个错误的合并提交会被直接覆盖,全程不会拉取任何远程的错误内容到本地。
稳妥备选方案(怕本地版本有误时用)
如果你不确定本地master是不是完全对应你要上线的版本,不想直接全量覆盖,可以先精准删除远程的错误提交再正常推送:
- 执行
git fetch origin,把远程最新的提交记录拉到本地,不会自动合并代码。 - 在GitHub提交记录页找到错误合并提交
zzzzzzz之前的最后一个正确提交的哈希值,执行以下命令直接把远程master重置到该正确提交:
git push origin +<正确提交哈希>:master
注意:把命令里的
<正确提交哈希>替换成你查到的实际提交哈希值即可,不需要保留尖括号。命令里的+代表强制更新远程分支指针,执行后远程上该哈希之后的所有提交(也就是那个错误的合并提交)都会被移除。
- 此时再执行正常推送命令
git push -u origin master即可,不会再出现推送被拒的报错,也不需要合并任何你不想要的远程变更。
补充说明
- 只要你本地配置的仓库远程地址(不管是HTTPS还是SSH格式)有该仓库的推送权限,上述命令都可以直接执行,不需要登录GitHub的服务器后台。
- GitHub网页端没有提供公共分支直接回滚的按钮是正常设计,分支指针重置类操作本身就是通过Git客户端指令完成的,不需要在网页端操作。
- 操作完成后刷新GitHub仓库的提交页面,就能看到错误的合并提交已经被清除,远程分支内容和你本地的正确代码完全一致。
内容的提问来源于stack exchange,提问作者Herman
相关产品推荐
相关产品推荐

