在进行正文之前先简单介绍下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】第三种,恭喜找不回来啦。
评论前必须登录!
注册