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

误强制推送删除远程分支7个提交,如何恢复?

别慌!这种用强制推送覆盖远程分支导致历史提交丢失的情况,完全有办法恢复——Git其实不会轻易删掉提交,只是暂时让它们脱离了分支的“指向”而已。结合你提到的合并提交细节,我给你一步步拆解解决方案:

恢复被覆盖的远程提交步骤

第一步:找回被删除的7个提交的头部哈希

Git会把所有仓库操作记录在reflog(引用日志)里,哪怕你做了强制推送,这些记录也不会丢。

  • 运行这个命令查看所有本地操作记录:
    git reflog
    
    你要找的是强制推送之前,本地对应远程分支(比如origin/<你的分支名>)的最后一个提交哈希——看起来会像这样:abc123 HEAD@{5}: pull origin main: Fast-forward,找到那条记录里的哈希值就行。
  • 如果reflog里找不到,还可以用git fsck --lost-found找出所有“悬空提交”(没有被任何分支/标签指向的提交),那些被删除的7个提交肯定在这个列表里。

另外,你提到用了合并提交的哈希做推送,还可以直接查看这个合并提交的父节点:

git show <你的合并提交SHA>

输出里会有Parent:字段,其中一个父节点就是原分支的头部(也就是包含那7个提交的分支末端),直接拿这个父节点哈希就行。

第二步:在本地恢复分支

拿到原分支的头部哈希(假设叫<original-head-sha>)后,先把本地分支切回正确状态:

git checkout <你的分支名>
git reset --hard <original-head-sha>

如果本地没有这个分支,也可以先创建一个临时分支来保存恢复的提交:

git checkout -b recover-temp-branch <original-head-sha>

第三步:推回远程仓库(谨慎操作!)

现在本地已经恢复了所有被删除的提交,你需要把它们推回远程,覆盖之前错误的强制推送:

git push -f origin <original-head-sha>:<你的分支名>

⚠️ 重要提醒:如果这期间有其他开发者拉取了被你覆盖的分支并做了新提交,一定要先和他们沟通!不然这次强制推送会覆盖他们的工作,造成新的问题。

预防下次踩坑的小建议
  • 永远不要随便用git push -f,除非你100%确认没有其他人在这个分支上工作,或者已经和所有协作成员沟通完毕。
  • 推送前养成拉取的习惯,用git pull --rebase可以避免很多不必要的冲突和覆盖问题。
  • 对于main/master这类核心分支,直接在远程仓库(比如GitHub)设置分支保护规则,禁止强制推送,从根源避免误操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:42:53