***操作始终在本分支上
***主要用于重置暂存区
内部操作见下图:
//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 ,暂存区里其它文件不变。