rm删除文件命令 以bad.text为例
删除后暂存区deleted no staged, git add 提交到暂存区后,执行git status deleted会变绿,执行commit后再git status ,working tree clean
delete之后 发现cat bad已经不存在
此时若想找回bad采用reset回退一步 回退到delete bad.txt之前 即HEAD在8253e9f,再ll查看资源发现bad又存在了 又可以cat了
此时是指delete操作已经commit提交到本地库
此时删除的文件可恢复原理就是任何操作只要commit提交到本地库都会有一条记录,这条记录永远不会被删除,那么恢复文件bad 就是版本回退到删除该文件之前 这里即是会退到HEAD 8253e9f
注意必须是要提交到本地库后才会有记录,即必须执行git commit后 若执行了某一操作没有add 或者add了但是没有commit 通过reflog去查看日志都没有该操作的记录
另一种情况是执行了delete操作且该操作add了但是没有commit到本地库此时采用git reset --hard HEAD可以看到虽然有delete操作 但是reflog依然没有这条delete记录 因此刚才版本回退的办法已经不可用,采用git reset --hard HEAD
后再ll发现bad文件恢复了
原理就是**–hard参数会修改暂存区和工作区为HEAD此时的指向,从下图可以看到此时feflog里面的 HEAD是执行delete之前的 也就是我们的8253e9f**可以看到8253e9所指向的是正是删除前的版本
该图的第一条moving to 8253e9f是我们上一种情况delete之后恢复bad的那条记录(为避免混淆 也可以新建一个文件 然后delete但是不commt 看得更清楚)
总结
删除文件后想要找回该文件前提是删除之前文件存在时的状态提交到了本地库
操作:git reset --hard index
删除操作提交到了本地库 index位置指向该记录
删除操作未提交到本地库 index位置使用HEAD