GitHub如何撤销错误合并 将main分支恢复到历史正常版本
main分支错误合并回滚操作方案
你的场景不需要反向合并Testdeploy分支——提示分支落后19个提交,是因为合并Winestore后main分支已经新增了合并提交等19条记录,Testdeploy分支不包含这些提交,Git无法直接执行合并,直接回滚main分支到正常状态即可。
根据你的错误合并是否已经推送到远程仓库,选对应方案操作:
方案1:错误合并仅存在本地,未推送到远程
- 切换到main分支:
git checkout main - 执行命令查看提交列表,找到合并Winestore之前、合并完Testdeploy后的最后一个正常提交的hash值(即commit id,一串7位以上的字符):
git log --oneline - 执行硬重置,将本地main指向该正常提交:
git reset --hard <替换为你找到的正常commit hash>
操作完本地main就恢复到了合并Winestore之前的正常运行状态,后续正常开发、推送即可。
方案2:错误合并已经推送到远程main分支
根据团队协作情况二选一:
子方案A:强制重置(适合团队无其他人基于错误版本的main开发)
- 先按方案1的步骤把本地main硬重置到正常commit节点
- 执行强制推送覆盖远程错误的main分支:
git push origin main --force
注意:强推会覆盖远程分支的提交历史,操作前必须确认没有其他同事在错误版本的main上提交新代码,否则会丢失他人提交内容。
子方案B:反向撤销提交(适合已有同事拉取过错误版本main,不修改历史更安全)
- 切换到main分支并拉取最新远程代码:
git checkout main && git pull origin main - 执行
git log --oneline找到合并Winestore的那条合并提交(提交信息一般为Merge branch 'Winestore' into main),复制它的commit hash - 执行revert命令反向撤销该合并提交,
-m 1参数表示保留main分支原有的提交内容:git revert -m 1 <替换为Winestore合并提交的hash值> - 如果出现代码冲突,手动解决冲突后完成revert提交
- 将生成的撤销提交正常推送到远程:
git push origin main
操作完成后远程main就会恢复到合并Winestore之前的正常运行状态,且不会修改原有提交历史,不会影响其他已经拉取过代码的同事。
相关操作界面参考:

内容的提问来源于stack exchange,提问作者Victor Torres
相关产品推荐
相关产品推荐

