当我们进行了git reset --hard
操作进行了版本回退,现在我们又需要之前的修改信息,也就是说我们需要版本回退之前的文件信息,此时我分了三种情况
- 之前的修改进行了
commit
提交,也就是说我们回退前的修改(曾经)存在于版本里; - 之前的修改未进行
commit
提交,但是进行了git add
操作; - 之前的修改未进行
commit
提交,也未进行git add
操作。
如果是第一种情况,很简单我们拿到之前修改的commit的哈希值(或者说id),然后执行 git reset --hard [hash]就可以回退到之前修改的状态。怎么拿hash
, 这个好说,可以执行命令git reflog
命令,它会显示出你之前的所有操作。如下:
62f039e
就是我的reflog
提交的哈希值,对其进行reset
即可
如果是第三种情况,不好意思暂时还没有找回的办法,如果你有欢迎拿出来大家交流
今天的重点就是第二种情况,毕竟曾经我也以为此情况无解,直到后来这边文章诞生前。
今天的主角命令 git fsck
,这里呢不具体讲解此命令,只是简单描述利用此命令进行文件恢复。
如图示,我新建了文件c.txt并添加了内容 ‘git fsck’,添加到缓存之后进行了reset操作, 此时因为没有进行git commit操作所以没有hash值,可供恢复,这个时候需要进行操作 git fsck --lost-found
操作,返回如下结果:
关于此命令,git官网的解释
根据提示,找到目录’.git/lost-found’,可以看到,
我们在‘commit’和‘other’目录下分别看到命令窗口打印出的文件,在‘other‘目录下找出之前遗失的文件
然后新建’c.txt’文件,并将文件内容复制过去,结束。
是不是很麻烦,特别是一次提交的文件多了,一个一个新建(修改)复制过去好烦哦。
是的很烦,所以保持良好的习惯。永远不要让这种操作降临到自己身上才是正道。(这只是为不可控的意外情况准备的)