网上关于这个撤销指令的教程多的数不胜数,但是在自己学习中还是遇到一些坑,在此记录下来,也给同样遇到坑的同学一点参考
第一种说法:
第二种说法:
这就出现了两种意思,在我修改了工作区的内容后 使用 git checkout -- <file>到底是从缓存区还是版本库中还原呢 ,对此只有实践才有发言权
第一步:在管理库中添加一个版本:
第二步:在缓存区中添加一个版本:
第三步:修改工作区文档
第四步:第一次使用git checkout -- <file>:
好了这时还原的结果是从缓存区里拉取的还原,貌似CSDN的网友说的更对。别急现在还不能下结论,毕竟廖神怎么会犯这种低级错误呢
第五步:清空缓存区:
附:清空暂存区
所谓的暂存区仅仅是.git目录下的一个index文件罢了,这也是为了什么被称为index(索引)
当删除暂存区内容的时候,其实就是删除index文件中的内容,.git/objects目录中的内容不会被删除。
指令:rm
.git
/index 直接删除该文件夹即可
第六步:这个时候缓存区没有版本了再次使用git checkout -- <file>:
发现再次执行git checkout -- <file>会报找不到文件,说明git checkout -- <file>不会从版本库中拉取文件
第七步:执行git reset HEAD将HEAD区里HEAD版本给恢复到暂存区
第八步:这个时候缓存区没有版本了再次使用git checkout -- <file>:
结论
通过以上操作,可以得出结论git checkout -- <file>指令是从先从缓存区中拉取版本还原,并不会从版本库中拉取还原。
参考文章: