git reset --hard 操作后的数据恢复

当我们进行了git reset --hard操作进行了版本回退,现在我们又需要之前的修改信息,也就是说我们需要版本回退之前的文件信息,此时我分了三种情况

  1. 之前的修改进行了commit 提交,也就是说我们回退前的修改(曾经)存在于版本里;
  2. 之前的修改未进行commit提交,但是进行了 git add 操作;
  3. 之前的修改未进行 commit 提交,也未进行git add操作。

如果是第一种情况,很简单我们拿到之前修改的commit的哈希值(或者说id),然后执行 git reset --hard [hash]就可以回退到之前修改的状态。怎么拿hash, 这个好说,可以执行命令git reflog命令,它会显示出你之前的所有操作。如下:
git reset --hard 操作后的数据恢复_第1张图片
62f039e 就是我的reflog提交的哈希值,对其进行reset即可

如果是第三种情况,不好意思暂时还没有找回的办法,如果你有欢迎拿出来大家交流

今天的重点就是第二种情况,毕竟曾经我也以为此情况无解,直到后来这边文章诞生前。

今天的主角命令 git fsck,这里呢不具体讲解此命令,只是简单描述利用此命令进行文件恢复。
git reset --hard 操作后的数据恢复_第2张图片
如图示,我新建了文件c.txt并添加了内容 ‘git fsck’,添加到缓存之后进行了reset操作, 此时因为没有进行git commit操作所以没有hash值,可供恢复,这个时候需要进行操作 git fsck --lost-found操作,返回如下结果:
git reset --hard 操作后的数据恢复_第3张图片

关于此命令,git官网的解释
在这里插入图片描述
根据提示,找到目录’.git/lost-found’,可以看到,
git reset --hard 操作后的数据恢复_第4张图片

我们在‘commit’和‘other’目录下分别看到命令窗口打印出的文件,在‘other‘目录下找出之前遗失的文件
git reset --hard 操作后的数据恢复_第5张图片

然后新建’c.txt’文件,并将文件内容复制过去,结束。
是不是很麻烦,特别是一次提交的文件多了,一个一个新建(修改)复制过去好烦哦。

是的很烦,所以保持良好的习惯。永远不要让这种操作降临到自己身上才是正道。(这只是为不可控的意外情况准备的)

你可能感兴趣的:(git)