误执行git push -f origin master致README.md丢失,如何找回对应提交?
找回被强制推送覆盖的Git提交及文件
利用Git引用日志(reflog)恢复
- 登录远程服务器的目标Git仓库目录,执行命令查看master分支的所有历史操作记录:
git reflog show master
从输出里找到包含README.md编写完成那次提交的记录,记下对应的提交哈希值(例如a1b2c3d)。 - 直接将远程master分支恢复到该提交:
git push origin a1b2c3d:master
或者在远程仓库本地重置分支后再推送:git reset --hard a1b2c3dgit push origin master --force(仅当本地重置后需要同步远程时使用)
查找并恢复悬空提交
如果reflog没有目标记录,可尝试查找Git保留的悬空提交:
- 执行命令列出所有悬空提交:
git fsck --lost-found
输出中的dangling commit条目即为未被引用的历史提交,逐个查看提交内容定位目标:git show 提交哈希值 - 找到包含README.md的提交后,创建临时分支指向它:
git branch recover_commit 提交哈希值
随后将该分支合并到master,或直接重置master到该提交,最后推送更新远程仓库。
关键提示
- Git默认会保留未被引用的提交90天,超出时间可能被垃圾回收(gc)清理,需尽快操作。
- 若远程仓库已执行过
git gc --prune=now这类强制清理命令,找回概率会大幅降低。
内容的提问来源于stack exchange,提问作者Jayaditya Mishra
相关产品推荐
相关产品推荐

