准备环境
如下所示,创建A并加入暂存区
System.out.println(“E”);内容然后commit StringDemo文件
commit之后在StringDemo中新增System.out.println(“E commit 之后 工作区内容”);
我们准备回滚到下图的分支,先粘贴该分支版本号
按如下方式操作
演示hard
选择hard 粘贴版本号
我们看到如下结果
首先暂存区内容(A)文件被删除了
然后 E节点的提交记录消失了
E节点提交之后的工作区内容消失了
然后我们再次点击commit,并没有发现什么可提交的文件
工作区内容、暂存区内容以及Repository的内容,都会恢复到回退的那个节点的代码,并且之前该版本后面的所有commit都会被删除
演示soft
reset后发现
暂存区(A)文件并没有被删除
提交记录中E节点记录被删除
StringDemo文件中工作区内容没有变动,以及提交的内容也没有被删除
但是,我们点击commit查看可提交内容以及StringDemo的变动可以看出
工作区和暂存区的内容都不会被修改,不过soft后所带来的差异(就是reset目标版本号)以后,所带来的所有的修改,会被保存到暂存区,也就是相当于git add 后但是没commit前
演示mixed
reset后可以看到好像除了提交记录没有之后,文件并没有什么变动
那么我们来查看一下commit
首先对比soft我们发现可提交文件少了A文件
然后我们再看StringDemo的文件内容
然后我们把A文件添加到暂存区
就可以发现可提交文件有了A文件
总结
只会保留工作区 的修改,暂存区以及mixed带来的差异,会被全部放到工作区中,也就是相当于没有git add之前的状态