智睿享
白蓝主题五 · 清爽阅读
首页  > 软件指南

提交记录怎么恢复?这些实用方法帮你找回丢失的数据

写代码时最怕什么?写了一整天的改动,一不小心提交记录没了。别慌,这种情况很多人都遇到过。在 Git 项目里,误操作导致提交记录丢失确实让人头疼,但只要操作得当,大多数情况下都能找回来。

先别急着重来,Git 其实有“后悔药”

Git 内部有个叫 reflog 的功能,它会记录你在本地仓库的所有操作,包括切换分支、回退版本、强制推送等。哪怕你用 reset 回退了提交,也能通过它找到原来的提交哈希值。

打开终端,进入项目目录,输入:

git reflog

你会看到类似这样的输出:

abc1234 HEAD@{0}: reset: moving to HEAD~1
def5678 HEAD@{1}: commit: 完成用户登录模块开发
ghi9012 HEAD@{2}: commit: 修复密码校验 bug

其中 def5678 就是你丢掉的那个提交记录。接下来只需要把它重新指回去:

git reset --hard def5678

这时候你的工作区就会回到那个提交的状态,文件内容也回来了。

远程仓库还能救场

如果你之前已经把提交推到了远程仓库(比如 GitHub 或 GitLab),那更简单。即使本地删了,远程还留着。

先查看当前分支是否和远程关联:

git status

如果提示 “Your branch is behind”,说明远程有你没拉取的提交。直接拉取就行:

git pull origin main

如果分支被删了也没关系,可以先从远程重新创建本地分支:

git checkout -b feature/login origin/feature/login

团队协作中别乱用强制推送

有时候为了“修正历史”,有人会用 git push --force。但如果别人已经基于旧提交继续开发,你的强制推送会让别人的提交记录“消失”。

万一别人因此丢了提交,可以让他们在自己的本地运行 git reflog 找到最后一次有效的提交,然后推到新分支:

git checkout -b recovery-branch <找回的commit-hash>
git push origin recovery-branch

这样至少能把丢失的工作抢救出来,再合并进主干。

编辑器自动保存也能帮上忙

有些情况不是 Git 的问题,而是你还没提交,就点了“撤销”或者关掉了编辑器。这时候别急着关项目。

像 VS Code 这类编辑器,默认会保留未保存的更改缓存。重新打开文件,有时会弹出“恢复未保存的文件”提示。另外,系统临时文件夹里也可能藏着自动备份。

Mac 用户可以在 ~/Library/Application Support/Code/Backups 里找找;Windows 用户可以看看安装目录下的 Backups 文件夹。

预防比恢复更重要

与其事后补救,不如平时多留个心眼。每次完成一段功能,顺手提交一下,不用非得写多详细的提交信息,哪怕写“临时保存”都行。

另外,建议开启 Git 的自动备份习惯。比如设置一个定时脚本,每天晚上把当前分支打个标签:

git tag auto-save/$(date +%Y%m%d-%H%M) HEAD

虽然不能代替正式提交,但关键时刻能救命。