Git reset中关于soft、mixed、hard参数的使用

使用git时,有时会遇到回退版本的问题,此时,reset命令就能派上用场。reset有3中模式,soft、mixed、hard,充分理解它们的不同,可以更好的使用它们。
在充分使用前,需要先理解git的本地组成部分

git的本地组成

git的本地组成有3部分,分别是工作区、暂存区、本地仓库

另外,还需要理解HEAD头指针

1、工作区

通俗的讲,就是电脑中的目录,就像下面图片中表示的一样
Git reset中关于soft、mixed、hard参数的使用_第1张图片

2、暂存区

使用git add后,文件便会计入到暂存区
Git reset中关于soft、mixed、hard参数的使用_第2张图片
在这里,创建了一个test文件并添加到了暂存区

3、本地仓库

进行commit操作后,暂存区中的文件会添加到本地仓库
Git reset中关于soft、mixed、hard参数的使用_第3张图片
此时将test文件加入了本地仓库,之后就可以使用push推送到远程分支上了

4、HEAD指针

HEAD指针指的是当前仓库所在的版本,每次提交,都会生成一个提交记录,HEAD指针就会指向最新的提交记录

soft、mixed、hard使用

完整命令: git reset --hard(mixed/soft) [commit id],其中commit id可以从git log --oneline命令中找到要回滚的id

首先,对test文件进行修改,并提交到本地仓库
Git reset中关于soft、mixed、hard参数的使用_第4张图片
将test中的文件hello git修改成了hello git!!!,并提交到了本地仓库,并且现在有2条提交记录
Git reset中关于soft、mixed、hard参数的使用_第5张图片

接下来,如果想要撤销此次commit,就可以使用reset命令

soft

soft参数会将HEAD指针指向要回滚的提交id,同时保留工作区和暂存区的代码,清除本地仓库中的代码

从上面图片中得知,要回滚的commit id是f7eae70

Git reset中关于soft、mixed、hard参数的使用_第6张图片
git status命令中可以看出,changes to be committed,有需要重新提交的文件,打开test文件,依旧是hello git!!!,文件并没有修改

此时的git log --oneline
Git reset中关于soft、mixed、hard参数的使用_第7张图片
之前的提交记录已经没有了

mixed

mixed参数也会是HEAD指针回滚到指定的提交id,同时只会保留工作区的代码
Git reset中关于soft、mixed、hard参数的使用_第8张图片
git staus命令中可以看出,显示的changes not staged for commit,暂存区已经没有了文件,而工作区的代码依旧是hello git!!!,HEAD指针也回滚到了指定的提交id

hard

hard参数也会是HEAD指针回滚到指定的提交id,本地仓库、暂存区、工作区都会回滚
Git reset中关于soft、mixed、hard参数的使用_第9张图片
工作区的文件已经变成了hello git,暂存区和本地仓库都没有文件

以上,便是reset命令中soft、mixed、hard的区别

git命令很多,还需多多总结

你可能感兴趣的:(Git,git)