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

使用git push -f后误删GitHub所有历史提交,如何恢复?

恢复GitHub仓库被强制推送覆盖的历史提交

这不是git push的默认行为,是你使用-f(强制推送)参数导致的——这个参数会直接用本地分支的历史覆盖远程仓库的对应分支,当本地main分支的提交历史和远程不一致时,就会把远程的旧历史全部替换掉。

下面是具体的恢复步骤:

第一步:找到被覆盖的旧提交哈希

在本地仓库的终端执行:

git reflog

这个命令会列出本地仓库所有操作记录,包括之前的提交、分支切换等。你需要找到强制推送前最后一个正常的提交记录,比如类似这样的条目:

a1b2c3d HEAD@{3}: commit: 新增用户登录功能

这里的a1b2c3d就是你需要恢复的旧提交哈希值。

如果本地reflog里找不到,还可以在GitHub仓库页面操作:

  • 打开仓库的「Commits」页面,滚动到底部,GitHub会保留短时间内被覆盖的提交记录,从中找到旧提交的哈希;
  • 或者进入仓库的「Insights」->「Network」视图,这里能看到所有曾经存在的提交节点,找到需要恢复的提交并复制哈希。

第二步:重置本地分支并推送到远程

  1. 把本地main分支重置到找到的旧提交:
git reset --hard <旧提交哈希>
  1. 再次执行强制推送,将正确的历史覆盖回远程仓库:
git push -f origin main

完成后,远程仓库的历史提交就会恢复成之前的状态。

后续避免方法

  • 除非明确知道本地分支历史是正确的,否则不要使用git push -f;
  • 推荐用git push --force-with-lease代替强制推送,这个命令会先检查远程分支有没有未同步的新提交,只有当远程分支和你本地最后一次拉取的状态一致时才会执行推送,能避免误覆盖远程历史。

内容的提问来源于stack exchange,提问作者Bhavyabhatia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:37:10