git fsck:找回被误删记录
git stash用来暂存修改,平时使用apply而不是pop,一次不小心使用了pop把stash暂存的修改都提出来,
git stash pop而且又大意直接把修改全部checkout .,暂存里面现在又没有记录了,这可是没有提交的一下午的工作啊,虽然还能记得大致修改,但是再重写一遍心态崩溃!
有没有什么方式能恢复以前暂存过的记录呢?有!
其实git stash pop 其实并没有真正地将文件删掉的,而是删除引用而已。借助fsck命令可以找回哪些“遗失”的修改,这些其实是“悬空对象"(dangling objects),不手动git gc会一直存在在磁盘上占用空间,但是不会占用太多,而且是找回丢失的工作的最后一根稻草。
fsck有很多命令,查看文档或使用--help查看所有选项。值得一提的是Linux命令中也有一个fsck命令,用于检查与修复 Linux系统档案。
git frck --help查看帮助,可以发现一个选项--unreachable,
#Print out objects that exist but that aren’t reachable from any of the reference nodes.
git fsck --unreachable
显示所有曾经的提交但是已经不可达的记录。这个时候就一个一个试呗,主要关注commit相关的记录:
git show 733130b11878c013559a6596335709ecf0a2d015显示这个id记录的相关修改内容,如果是曾经的修改。需要回复的话,直接恢复到工作区即可:
git stash apply 733130b11878c013559a6596335709ecf0a2d015
还可以将文件差异打包
git diff --name-only | xargs tar -rf /d/diff.tar参考博客:


