但行好事
莫论前程❤

Git reset –hard操作后的数据恢复reflog,fsck

在进行正文之前先简单介绍下git reset 命令

git reset

git reset 命令用于改变当前的仓库状态

简单的场景用例:假设一次修改了两个文件,然而需要对这两个文件分别进行两次提交,在进行缓存操作时(git add),不小心将两个文件都进行了缓存,此时我们需要对其中一个文件取消缓存,此时就需要git reset 操作来实现:

$ git add .
        a.txt
        b.txt
# 撤回add上的问题
git reset -- a.txt
        b.txt

对于git reset命令,添加--hard参数后,会回到上次commit的状态,也就是说从上次commit之后的的修改都将被重置,换句话说这些数据都丢失了,所以要谨慎操作哦。

前置知识就到这里了,开始今天的重点。

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

  • 【1】之前的修改进行了 commit 提交,也就是说我们回退前的修改(曾经)存在于版本里;

  • 【2】之前的修改未进行commit提交,但是进行了 git add 操作;

  • 【3】之前的修改未进行 commit 提交,也未进行git add操作。

【1】第一种情况,可以使用reflog来进行信息找回

$ git reflog # 显示之前的所有操作    找到 哈希值(或者说id)  
$ git reset --hard [hash]

【2】第二种情况,使用fsck

​ 此时因为没有进行git commit操作所以没有hash值,可供恢复,这个时候需要进行如下操作:

git fsck --lost-found
  • git fsck

fill system check 文件系统检查,用来对本地和远程仓库的一致性检查,dangling objects悬空对象
在悬空对象列表中,使用git show commitId查看悬空记录的详情,git merge commitId即可恢复

【3】第三种,恭喜找不回来啦。

赞(0) 打赏
未经允许不得转载:刘鹏博客 » Git reset –hard操作后的数据恢复reflog,fsck
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏