Git丢失commit恢复方法:个人项目分支操作后提交找回
如何找回你丢失的Git提交
别慌!这种情况我之前踩过坑,大部分时候你辛苦写的代码其实没丢——Git只是没把那个提交和任何分支关联起来而已,咱们一步步把它找回来:
第一步:用git reflog找历史记录
这是最常用也最有效的方法,Git的reflog会记录所有HEAD的移动痕迹,包括那些没被分支指向的提交,哪怕你切分支、重置都能查到。
在终端里输入:
git reflog
你会看到一串类似这样的输出:
abc1234 HEAD@{0}: checkout: moving from new-branch to old-branch def5678 HEAD@{1}: checkout: moving from old-branch to new-branch ghi90ab HEAD@{2}: commit: 完成了XX功能的全部开发 # 这大概率就是你丢失的那个提交 jklcd34 HEAD@{3}: checkout: moving from master to old-branch
找到那个包含你大量工作的提交记录,记下它的哈希值(比如上面的ghi90ab)。
第二步:确认提交内容
先切换到这个提交,看看是不是你要找的内容:
git checkout ghi90ab
这时候你会进入“detached HEAD”状态,没关系,只是临时查看。确认代码没错后,咱们把它关联回分支。
第三步:把提交恢复到原分支
有两种常用方式:
- 方式一:直接重置原分支到该提交
如果你的原分支在丢失提交之后没有新的改动,直接用:
git checkout old-branch # 先切回原分支 git reset --hard ghi90ab
⚠️ 注意:--hard会丢弃原分支上该提交之后的所有改动,如果你之后有新提交,谨慎用这个!
- 方式二:创建临时分支合并回去
如果原分支有新改动,或者不想覆盖现有内容,可以先创建一个临时分支指向丢失的提交,再合并到原分支:
git branch recover-branch ghi90ab # 创建临时分支 git checkout old-branch git merge recover-branch # 合并到原分支
合并完成后,你可以删掉临时分支:git branch -d recover-branch
备选方案:用git fsck查找
如果reflog里找不到(比如过了很久,Git自动清理了reflog),可以试试:
git fsck --lost-found
这个命令会找出所有未被引用的Git对象,包括提交。你可以去.git/lost-found/commit目录下查看这些提交的内容,找到对应的哈希值后,再用上面的方法恢复。
小提醒
Git默认会保留未被引用的提交至少两周,所以只要你及时处理,大概率能找回来。以后操作分支前,最好先git status确认当前分支的状态,或者用git log看看提交记录,避免类似情况~
内容的提问来源于stack exchange,提问作者yourknightmares
相关产品推荐
相关产品推荐

