git reset 命令详细介绍
reset 命令学习建议:reset命令带三个参数,应用于三种情况,初次学习的话,可能理解起来有点费事,不过,大家多看几遍多想几遍,也能学好reset命令的。请牢记住:应用最多是不带参数的reset命令。
1、git reset 的作用
有时候,我们commit提交代码后,发现这一次commit的内容是有错误的,面对这种情况有两种解决方法:
解决方法1:修改错误内容,再次commit一次
解决方法2:使用git reset 命令撤销这一次错误的commit
第一种方法比较直接,但会多次一次commit记录,建议使用第二种方法,因为错误的commit没必要保留下来。
2、git reset 的基本用法
git reset 命令用于回退版本,可以指定退回某一次提交的版本。git reset 命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
说明1:--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
说明2:HEAD 表示回退的版本,可以指定回退整个仓库的某个版本,还可以指定回退某个文件的版本,如下所示:
$ git reset HEAD^ # 回退所有内容到上一个版本
$ git reset HEAD^ main.java # 回退 main.java 文件的版本到上一个版本
$ git reset 052e # 回退到指定版本
3、git reset 参数介绍
git reset有三个参数:soft、mixed、hard,具体的使用方法下面这张图:
3.1、reset --hard:最危险的操作,容易造成丢失。
reset --hard 会在重置版本的同时,重置暂存区和工作目录里的内容。也就说,就是在暂存区中你没有commit的修改会被全部擦掉,在工作区中你没有add的修改也被全部擦掉。
3.2、reset --soft:保留工作目录,并把重置 HEAD 所带来的新的差异放进暂存区。
reset --soft 会在重置版本库的时候,保留工作目录和暂存区中的内容,并把重置版本库所带来的新的差异放进暂存区。也就说是说,工作目录的内容不受影响,而暂存区中已经commit的内容变成已add的状态。
说明:我们使用soft参数的情况不多,如果你有更好的使用介绍,请分享出来吧。
3.3、reset 不加参数(mixed):保留工作目录,并清空暂存区中未提交的修改。
reset 如果不加参数,那么默认使用 --mixed 参数。它的执行结果是:保留工作目录,并且清空暂存区中未提交的修改。也就是说,工作目录的修改、暂存区的未提交的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录。简而言之,就是把所有差异都混合(mixed)放在工作目录中。