git找回commit后丢失的代码

现象

项目做了git commit后的校验,导致commit失败。突然发现代码都回到之前的版本了,还没有执行push操作。

排查

  1. 先看了git status,确认暂无待提交的文件
  2. 因为commit没有成功,所以git log 也没有记录
  3. git reflog找到最新的记录恢复也没有用,还是上次提交的状态

解决

查到一个名词,悬空提交

列出所有悬空提交

git fsck --lost-found                                        
Checking object directories: 100% (256/256), done.
Checking objects: 100% (1322/1322), done.
dangling commit 61018b55da4479ed23138b02d9d6a0223bc570ad
dangling commit 7613236d03019cb6b7f8c6ba5d3353147c23c3ba
dangling commit c3f34605fbc8ccdc046b3633c3f68eac6b026059
dangling commit 58e4d708c5925eff0cb1faccbd6a26ec6fbdc2c1
dangling commit eab54747a8f2137068fa72ebb5557c91396ea6a8
dangling commit 95e92c681c2f3a4de02ca2d56c2e47d856eeb7a8
dangling tree 950a29447ad446c43c28ec050c148deb15f2a113
dangling commit dc5a38453abbdac4eb966fd56bbc2ad33a2b5f8b
dangling commit 982d6c0f1fc3118a6695138041ee87543519a32c
dangling commit 34de5f042440c5a5354dd4aaeceebf7d2cf7c482

查看第一个提交

git show 61018b55da4479ed23138b02d9d6a0223bc570ad

发现确实是我丢失的代码,放心了

​创建临时分支指向悬空提交

git branch temp-branch 61018b55da4479ed23138b02d9d6a0223bc570ad
git checkout temp-branch

合并到主分支

git checkout master  # 或你的主分支名
git merge temp-branch

大功告成

posted @ 2025-04-29 13:18  火炬冬天  阅读(63)  评论(0)    收藏  举报