Git&GitHub六、hard和soft以及mixed参数对比。

①reset命令的三个参数对比:--hard、--soft、--mixed

git reset --hard 部分哈希值、git reset --hard HEAD^ 、 git reset --hard HEAD~3 。其中--hard可以为--soft、--mixed。

利用git help reset查询帮助文档,查看这三个参数的对比。

Git&GitHub六、hard和soft以及mixed参数对比。

Git&GitHub六、hard和soft以及mixed参数对比。

Git&GitHub六、hard和soft以及mixed参数对比。

②--soft的描述:

--soft

Does not touch the index file or the working tree at all <不触碰暂存区和工作区。那么意思就是仅仅触碰本地库,在本地库移动一下HEAD指针。>(but resets the head to <commit>, just like all modes do). This leaves all your changed files "Changes to be committed", as git status would put it.

index file指的是暂存区,working tree指的是工作区。

③--mixed的描述:

--mixed

Resets the index but not the working tree<触碰index file暂存区,但不会去触碰working tree工作区。> (i.e., the changed files are preserved but not marked for commit) and reports what has not been updated. This is the default action.

If -N is specified, removed paths are marked as intent-to-add (see git-add(1)).

一方面在本地库移动HEAD指针,并且重置了暂存区。

③--hard的描述:

--hard

Resets the index and working tree.<重置暂存区和工作区> Any changes to tracked files in the working tree since <commit> are discarded.

在本地库移动HEAD指针,并且重置暂存区和工作区。

④体验一下这三个参数:

第一:使用git reset --soft 部分哈希值

Git&GitHub六、hard和soft以及mixed参数对比。

 good.txt原来结尾的值是:qqqqqqqqq。

Git&GitHub六、hard和soft以及mixed参数对比。

Git&GitHub六、hard和soft以及mixed参数对比。

如果是git reset --hard 部分哈希值,则查看文件cat good.txt,里面的值是mmmmmmmmm结尾。

但是git reset --soft部分哈希值,查看文件cat good.txt,不变,还是之前的qqqqqqqqq结尾。

Git&GitHub六、hard和soft以及mixed参数对比。

再查看状态:git status

Git&GitHub六、hard和soft以及mixed参数对比。

git reset --soft 部分哈希值相当于:

Git&GitHub六、hard和soft以及mixed参数对比。

 本地库版本比暂存区和工作区版本都低

或者

Git&GitHub六、hard和soft以及mixed参数对比。

本地库版本比暂存区和工作区版本都高

这个时候git status 的modified :good.txt是绿色的字。因为工作区和暂存区同步,相当于工作区已经将内容git add 文件名提交到暂存区了。但是暂存区的内容有提交给本地库。

而cat good.txt读取的是工作区的内容。所以工作区的内容不变。所以cat good.txt,值还是之前的qqqqqqqqq而不是移动的HEAD指针指向的内容mmmmmmmmm。

第二:使用git reset --mixed 部分哈希值

先用git reflog 显示以下内容:

Git&GitHub六、hard和soft以及mixed参数对比。

Git&GitHub六、hard和soft以及mixed参数对比。

 

但是查看工作区内容,cat good.txt,仍然是qqqqqqqqq,而不是hhhhhhhhh。也不是mmmmmmmmm。

因为mmmmmmmmm那一个移动HEAD指针是soft。工作区内容也没有变化。

Git&GitHub六、hard和soft以及mixed参数对比。Git&GitHub六、hard和soft以及mixed参数对比。

Git&GitHub六、hard和soft以及mixed参数对比。

本地库和暂存区比工作区版本都低

或者

Git&GitHub六、hard和soft以及mixed参数对比。

本地仓库和暂存区比工作区版本都高

Git&GitHub六、hard和soft以及mixed参数对比。

modified : good.txt变成红字。说明工作区和暂存区不一样。可以通过git add 文件名将工作区内容加入到暂存区。

第三:使用git reset --hard 部分哈希值

本地仓库、暂存区、工作区都同时进退版本,版本一致,内容一致。

Git&GitHub六、hard和soft以及mixed参数对比。

但工作区之前也不是hhhhhhhhh,而是qqqqqqqqq。因为之前是--soft和--mixed在操作。

移动到ooooooooo。

Git&GitHub六、hard和soft以及mixed参数对比。

Git&GitHub六、hard和soft以及mixed参数对比。

Git&GitHub六、hard和soft以及mixed参数对比。