此处要说的几个命令分别为:
① git reset --soft HEAD~
② git reset [--mixed] HEAD~
③ git reset --hard HEAD~
假如按照下面方式,提交了三个版本:
那么此时三个工作区,暂存区,和版本库中内容分别是什么呢
准备工作做完,下面就是我们要说的重点了
如果此时想回退版本怎么办 ?
①:git reset --soft HEAD~
这个命令所做的操作可以理解为和git commit --amend操作是一样的,可以理解为撤销上一次提交的意思
本质是:在执行命令后,HEAD指针会指向上一次提交对象,并且会带着分支一起移动,这就和git checkout “分支名”实质不太一样了,checkout只是改变了HEAD指针的指向,但是分支会留在原地
我们想知道的是,在我执行完上述命令后,发生了哪些变化呢?
----:其实执行上述命令后只有HEAD发生了变化,我们理解的撤销上一次提交其实并没有真正的撤销,我们再来看看三部分区域内容:
当我们执行完上述命令后,现在是待提交状态,这个时候你又可以重新提交了,并且提交以后效果三个区域的内容又是和刚开始一样都是v1,v2,v3。我的个人理解,这次回退,其实改变的地方是可以重新提交注释
使用git reflog命令可以看到,当我们执行git reset --soft HEAD~, 其实只是git自己给做了一次提交,并将HEAD指向了上一次提交对象,上次commit并没有真正的撤销
② git reset [--mixed] HEAD~
当我们执行完上述命令后,发生了哪些变化呢?
HEAD和暂存区都发生了变化,只有工作区没有变化
当我们执行完上述命令后,现在是待暂存状态,这个时候你又可以暂存并重新提交了,并且提交以后效果三个区域的内容又是和刚开始一样都是v1,v2,v3。我的个人理解,这次回退,其实改变的地方还是可以重新提交注释
③ git reset --hard HEAD~
执行完上述命令后又会发生那些变化呢?
我们可以看到三个区域都发生了变化,这个时候其实可以理解为回到了第二次提交结束的时候,现在目前是出于working tree clean状态,所以我们可以知道,这个命令不能随便使用的,否则会把之前所更改的记录清空,如果之前的修改还未提交,那么就找不回了,所以慎用