为了方便直观的演示,在仓库下建立一个名为file.txt的文本文件,然后在本地分别做十次提交,提交信息和文本文件内容保持一致,方便演示,示例如下:



此时使用"git status"查看状态

使用"git reset --mixed <index>"命令可以回到指定索引的版本,使用"git reset --mixed 43ba861"索引为43ba861的版本。此时再使用"git reflog"命令查看,Head指针已经移动到索引为43ba861的版本,然后在使用git status查状态。

使用"git reset --soft <index>"命令可以回到指定索引的版本,使用"git reset --soft 5d734ad"索引为5d734ad的版本。然后使用git status查看状态

它本质上是撤销了上一次git commit命令。其实就是把该分支移动回原来的位置,而不会改变索引和工作目录。
git reset命令不仅仅可以用来版本回退,也可以用来版本前进,这里不做详细介绍,具体会在Git重置解密中详细介绍
删除已经添加到本地库的文件
同样的也可以使用该命令用来恢复删除的文件使用"rm file.txt"删除文件,再执行"git status"命令查看状态

此时文件已从工作区移除,状态也成为一个deleted删除状态 这个时候文件只是从工作区移除了,暂存区还存在该文件,所以需要对该文件做一个添加提交的操作,实际这里添加提交的是删除操作,这样file.txt才能从暂存区移除

完成这几步操作后,这时候文件已从暂存区删除,这个删除操作会保留在本地库中,仅仅保存的是一个操作记录,这个记录不能被删除,使用"git reflog"查看历史记录

这个就是我们本次删除这个文件所保留的操作记录,下面一行是我们新建该文件时保留的记录,可以看到新建改文件时和删除该文件时都有一个HEAD指针,我们可以通过HEAD指针来恢复本次删除的文件。使用"git reset --hard ed6b217"来恢复移除的文件

可以看到,移除的文件已恢复到工作区和暂存区
删除已经添加到暂存区的文件
在本地代码仓建立一个名为my.txt的文本文件,然后使用"git add"命令和"git commit"命令把文件提交到本地库,然后使用rm删除,然后使用git add命令把删除的操作提交到暂存区,此时还没有把删除的操作提交到本地库

此时如果想把删除的文件从暂存区取回来,先使用"git reflog"命令查看新建改文件时的索引

然后使用"git reset --hard HEAD"命令来恢复改文件

删除的文件想要找回来,前提是删除前这个文件存在时的状态提交到了本地库