今天在使用git的stashes的时候,不小心删错stash,导致辛辛苦苦写的代码全没了!经过知乎一个大佬评论才将问题解决。
常规方法
步骤1.使用 git fsck --lost-found 查询所有删除的stashes(所有!而且好像是不按时间排序的)
步骤2.通过git show commitId (commitId就是步骤一查出来的一个个dangling commit 后面的 id)
如我使用:git show ffff22d49eb43607d0a06777f608fe47c1f81bf7(第一个commitId),但是很遗憾,这个不是我想要恢复的stash,所以只能一个一个的找,直到找到才能进行下一步骤
步骤3. git stash apply commitId
在通过步骤2找到commitId后,就可以通过这个命令恢复stash了,大功告成!
优化
很明显,如果之前删除的stash很多的话,会导致步骤1查出来的数据很多,想要找到需要恢复的commitId非常难,只能一个一个找。 这里我分享一个命令,来自于四年半前的知乎凡人大佬:
git fsck --unreachable | awk '{print $3}' | xargs git show >> find.txt
这个命令会创建出一个find.txt,里面就是所有删除的stash信息了,包括当初stash的名称,所以我们在find.txt中通过名称进行搜索,进而拿到commit,再执行步骤3,完美,搞定!