You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法修复本地状态时,如何撤销推送到GitHub的12532条重复提交?

无法修复本地状态时,如何撤销推送到GitHub的12532条重复提交?

这种大规模提交重复的情况确实让人头大,别慌,咱们一步步来把远程分支拉回正轨:

第一步:找到远程分支在坏推送前的最后正常提交

首先你需要定位到preload-scene-dask-delayed分支在你那次错误push之前的最后一个正常提交哈希值。你可以通过GitHub的UI来操作:

  • 打开你的GitHub仓库,切换到preload-scene-dask-delayed分支的提交历史页面
  • 往下翻找,找到你push那12532条重复提交之前的最后一个有效提交(也就是没有重复的那个版本)
  • 点击该提交的哈希值(一串7位或更长的字母数字),复制完整的SHA-1值

如果提交太多翻起来麻烦,也可以用Git命令查看远程分支的历史(即使现在远程是坏的,Git依然会保留之前的提交记录):

git log --oneline origin/preload-scene-dask-delayed

从输出里找到那个正常的提交哈希即可。

第二步:强制重置远程分支到正常状态

拿到正确的提交哈希后(假设是40f00d3,也就是你示例里的第一个正常提交),用以下命令强制将远程分支指向这个旧提交:

git push origin +40f00d3:preload-scene-dask-delayed

这里的+符号是关键,它告诉Git忽略当前远程分支的状态,直接覆盖成你指定的提交。

第三步:同步本地分支到修复后的远程状态

现在远程已经恢复正常了,你需要把本地的坏分支也同步过来:

git checkout preload-scene-dask-delayed
git reset --hard origin/preload-scene-dask-delayed

这个命令会把本地分支强制重置为和远程完全一致的状态,注意这会清除本地该分支上所有未提交的修改,如果有需要保留的内容,记得先备份。

第四步:提醒协作者同步分支

如果有其他同事也在使用这个分支,一定要告诉他们不要直接pull,而是执行以下命令同步本地状态:

git checkout preload-scene-dask-delayed
git fetch origin
git reset --hard origin/preload-scene-dask-delayed

避免他们把本地的坏提交再次推送到远程。

额外提示

如果实在找不到那个正常提交的哈希,还可以去GitHub仓库的「Insights」→「Network」页面,查看分支的历史变迁,找到你那次错误push的节点,就能看到push之前的分支状态对应的提交哈希了。

另外,强制推送虽然能解决问题,但要谨慎使用——如果这个分支是多人协作的公共分支,一定要确保所有人都知情,避免造成数据丢失。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 09:28:08