git reset [--hard | soft | mixed | merge | keep ]git
將當前分支重設到指定的<commit>(默認是HEAD,即最新提交)。而且根據[mode]參數能指定重置(reset)idex或是working directory。ide
1.--softspa
版本庫(repository):HEAD 指向指定<commit>3d
暫存區(index):不重置到指定<commit>,此次<commit>以後的全部變動都撤銷到此blog
工做區(working directory):無變化rem
egit
當前分支是master,<commit>C是最新提交,即HEAD指向<commit>Cast
執行:class
$ git reset --soft HEAD~1im
執行後:
①版本庫:HEAD指向<commit>B;②暫存區:<commit>C撤銷到暫存區;③工做區:無變化
執行:
$ git status
能夠看到<commit>C撤銷到了暫存區,處於"Changes to be committed"狀態。
2.--mixed(默認模式)
版本庫:HEAD 指向指定<commit>
暫存區(index):重置到指定<commit>
工做區(working directory):此次<commit>以後的全部變動都撤銷到此
eg
當前分支是master,<commit>C是最新提交,即HEAD指向<commit>C
執行:
$ git reset --mixed HEAD~1
執行後:
①版本庫:HEAD指向<commit>B;②暫存區:重置到<commit>B;③工做區:<commit>C撤銷到工做區
執行:
$ git status
能夠看到<commit>C撤銷到了工做區,處於"unstage"狀態。
3.--hard
版本庫:HEAD 指向指定<commit>
暫存區(index):重置到指定<commit>
工做區(working directory):重置到指定<commit>
注意:工做區未add的修改和暫存區未commit的修改,所有丟棄。(若是想回到最新提交可用 git reflog 查看commit號 而後再利用本命令恢復)
eg
當前分支是master,<commit>C是最新提交,即HEAD指向<commit>C
執行:
$ git reset --hard HEAD~1
執行後:
①版本庫:HEAD指向<commit>B;②暫存區:重置到<commit>B;③工做區:重置到<commit>B
執行:
$ git status
能夠看到工做空間是乾淨的
4.--merge
不經常使用
5.--keep
不經常使用