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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:02:15