命令:
git reset [--hard | soft | mixed | merge | keep ]
作用:
将当前分支重设到指定的<commit>(默认是HEAD,即最新提交)。并且根据[mode]参数能指定重置(reset)idex或是working directory。
mode详解:
1.--soft
版本库(repository):HEAD 指向指定<commit>
暂存区(index):不重置到指定<commit>,这次<commit>之后的所有变更都撤销到此
工作区(working directory):无变化
eg
当前分支是master,<commit>C是最新提交,即HEAD指向<commit>C
执行:
$ git reset --soft HEAD~1
执行后:
①版本库: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
不常用
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。