***操作始終在本分支上
***主要用于重置暫存區(qū)
內(nèi)部操作見下圖:

//git reset 有兩種用法:
一是用于切換當前分支master 所指向的提交commit來替換當前暫存區(qū)或工作區(qū)的內(nèi)容 (分為hard, soft 和mixed);
?$ git reset --hard 456gr3
//完成全部3個步驟,即改變引用master 的指向(指向另一個提交commit, 其ID 為命令參數(shù)456gr3 );用新指向的commit 目錄樹替換暫存區(qū)的內(nèi)容;用新指向的commit 目錄樹替換工作區(qū)的內(nèi)容。
?$ git reset --soft 456gr3
//完成1 個步驟,即改變引用master 的指向(指向另一個提交commit, 其ID 為命令參數(shù)456gr3 );暫存區(qū)的內(nèi)容和工作區(qū)的內(nèi)容不變。
?$ git reset --mixed 456gr3
?$ git reset 456gr3
//以上兩條命令相等,命令默認采用mixed選項。其完成2個步驟,即改變引用master 的指向(指向另一個提交commit, 其ID 為命令參數(shù)456gr3 );用新指向的commit 目錄樹替換暫存區(qū)的內(nèi)容;工作區(qū)的內(nèi)容保持不變。
?$ git reset --soft HEAD ^
//僅將引用master 切換到前一個提交,暫存和工作區(qū)不變。常用于撤銷最近一次提交。
?$ git reset HEAD ^
//將引用master 切換到前一個提交,并更新暫存區(qū),但工作區(qū)不變。
?$ git reset --hard HEAD ^
//徹底撤銷最近一次提交,三區(qū)全都恢復到上次提交時的狀態(tài)
?$ git reset HEAD
?$ git reset
//以上兩條命令等價。意為重置當前暫存區(qū),也即是撤銷所有對暫存區(qū)的提交
二是用指定的提交下的文件替換掉當前暫存區(qū)的文件。
?$ git reset 87gy43 -- a.txt
//用ID (哈希值)為87gy43開頭的提交下的a.txt 替換掉當前暫存區(qū)下的a.txt
?$ git reset? -- a.txt
//撤銷對a.txt 的add 操作。即用當前HEAD 所指的提交下的a.txt 替換掉當前暫存區(qū)里保存的a.txt ,暫存區(qū)里其它文件不變。