在项目开发的过程中,通常使用git 等版本管理工具来管理项目。
git常用的命令我们都已经掌握,例如:
git init 初始化git本地仓库
git add 添加文件到暂存区
git commit -m "提交信息" 提交文件到本地仓库
git pull 从远程分支拉取
git push 推送本地文件到远程分支所在仓库
以上几个命令,应该是我们日常工作开发中用的最频繁的几个命令。但是最近在我的工作中,经常会用到一个回退版本的命令git reset
基本概念复习在复习这个命令之前,先来回顾下Git的基本概念
- 工作区
工作区就是我们在开发过程中实际操作的区域,比如在我们的idea中,我们写代码的地方就是工作区
- 暂存区
暂时区,英文叫stage或者index。一般存放在.git目录下的index文件中。
- 版本库
版本库是指我们的本地仓库
下面这个图片展示了工作区和暂存区以及版本库的关系:
git reset 命令可以指定退回某一次提交的版本
基本语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
--mixed :此参数为默认的参数,移动本地版本库的HEAD指针,重置暂存区,但是不会影响工作区。
--soft:仅仅一栋本地版本库的HEAD指针,其他什么都不做,即暂存区和工作区都不会重置。
--hard:撤销工作区中所有未提交的修改内容,将暂存区与工作区都回退到上个版本,并删除之前所有提交的信息
1、在本地初始化一个git仓库
2、新建一个文件hello.java,并使用git add命令添加到暂存区
3、使用git commit 命令提交hello文件到本地仓库
4、此时,新建的hello.java文件是空的。修改文件内容,然后再次提交。
5、使用git reset 命令回退版本
可以看到,hello.java文件已经将暂存区的提交给重置了了。查看状态发现,文件的变更为修改状态,即我们commit之前的状态。工作区的内容也没有受影响。
由于之前我们使用reset --mixed命令将版本回退,所以导致我们的暂存区重置,所以我们将hello.java文件 重新commit
现在执行reset --soft HEAD^ 命令
通过git status 查看当前文件的状态为绿色的修改,所以soft命令并没有重置暂存区。我们可以直接用commit命令提交
我们知道hard命令会将工作区和暂存区都重置,所以我们新建一个文件,不提交,看看hard会不会影响到我们在工作区的文件
执行命令 git reset --hard HEAD
我们发现,位于工作区的文件hello1.java已经没有了。因为我们回退的版本是没有hello1.java文件的。hard将工作区和暂存区全都进行了重置



