赞
踩
我 TM 脑子被驴踢了,添加了一些文件,没有配置 .gitignore 文件直接执行了 git add .
,导致一些本不该添加到 git 版本管理的文件被加入了跟踪缓存区。
本来使用 git rm --cached 文件通配符
就能解决的事情,我手欠加脑袋抽风,执行了 git reset –hard HEAD
命令,重置了工作区和暂存区,回来一看,自己码了一天的代码全没了。。。
哇哦,小拳拳锤自己胸口
find .git/objects -type f | xargs ls -lt | sed 60q
命令
该命令可以找回最近的 60 次 git add
提交的文件,但对于没有 add 过的文件,抱歉,尸骨无存~
git cat-file -p ID > recover.txt
命令
该命令可以将 ID 所示的文件读取出来重定向保存到 recover.txt
文件内,那有同学就会问了:老湿老湿,你怎么知道一定时 .txt 文件?别着急,后面会讲~
提交的文件 ID
ID 是 objects 后面的一串东西(去掉 /
),比如 -r--r--r-- 1 Heygo 197609 1706 Feb 5 10:52 .git/objects/37/755585613dbd77013b8c86abab558097794314
的文件 ID 为 37755585613dbd77013b8c86abab558097794314
恢复文件
执行 git cat-file -p ID > recover.txt
命令后,在 git 仓库的主目录下可以找到恢复的文件
判断文件类型
恢复图片或文档
将 recover.txt 文件用 Sublime Text 软件打开,发现是二进制文件,可以尝试修改其后缀名,我这里原本是有一个 .ico 文件,因此我将其后缀名修改为 .ico
哇哦,好起来了
恢复文本文件
将 recover.txt 文件用 Sublime Text 软件打开,发现是文本文件,可根据其内容修改后缀名,这里是 .bat 批处理文件
注:
.git/objects/pack/.pack
为压缩后的文件,把 .git/objects/
下松散的文件进行了压缩,.git/objects/pack/.idx
为压缩后的索引,方便快速在压缩的文件里找到某个文件git reset --hard
要慎用,因为此操作会清空工作区和暂存区,如果我们只执行了 git add
命令将文件提交到暂存区,还没有执行 git commit
命令将文件提交到本地库,那就哦豁
代码要及时 commit
!代码要及时 commit
!代码要及时 commit
!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。