***操作始终在本分支上

***主要用于重置暂存区

内部操作见下图:

git reset

//git reset 有两种用法:

一是用于切换当前分支master 所指向的提交commit来替换当前暂存区或工作区的内容 (分为hard, soft 和mixed);

‌$ git reset --hard 456gr3

//完成全部3个步骤,即改变引用master 的指向(指向另一个提交commit, 其ID 为命令参数456gr3 );用新指向的commit 目录树替换暂存区的内容;用新指向的commit 目录树替换工作区的内容。

‌$ git reset --soft 456gr3

//完成1 个步骤,即改变引用master 的指向(指向另一个提交commit, 其ID 为命令参数456gr3 );暂存区的内容和工作区的内容不变。

‌$ git reset --mixed 456gr3

‌$ git reset 456gr3

//以上两条命令相等,命令默认采用mixed选项。其完成2个步骤,即改变引用master 的指向(指向另一个提交commit, 其ID 为命令参数456gr3 );用新指向的commit 目录树替换暂存区的内容;工作区的内容保持不变。

‌$ git reset --soft HEAD ^

//仅将引用master 切换到前一个提交,暂存和工作区不变。常用于撤销最近一次提交。

‌$ git reset HEAD ^

//将引用master 切换到前一个提交,并更新暂存区,但工作区不变。

‌$ git reset --hard HEAD ^

//彻底撤销最近一次提交,三区全都恢复到上次提交时的状态

‌$ git reset HEAD

‌$ git reset

//以上两条命令等价。意为重置当前暂存区,也即是撤销所有对暂存区的提交

二是用指定的提交下的文件替换掉当前暂存区的文件。

‌$ git reset 87gy43 -- a.txt

//用ID (哈希值)为87gy43开头的提交下的a.txt 替换掉当前暂存区下的a.txt

‌$ git reset  -- a.txt

//撤销对a.txt 的add 操作。即用当前HEAD 所指的提交下的a.txt 替换掉当前暂存区里保存的a.txt ,暂存区里其它文件不变。