git reset 进阶
命令:
git reset [--hard | soft | mixed | merge | keep ]
作用
将当前分支重设到指定的 commit (默认是HEAD,即最新提交)。并且根据[mode]参数能指定重置(reset)index或是working directory。下面介绍一下几个常用的参数:
mode 参数详解
1.--soft
- 版本库(repository):HEAD 指向指定
- 暂存区(index):不重置到指定,这次之后的所有变更都撤销到此
- 工作区(working directory):无变化
当前分支是master,C是最新提交,即HEAD指向C
$ git reset --soft HEAD~1
执行后:
①版本库:HEAD指向B;②暂存区:C撤销到暂存区;③工作区:无变化
执行:
$ git status
可以看到C撤销到了暂存区,处于"Changes to be committed"状态。
2.--mixed(默认模式)
- 版本库:HEAD 指向指定
- 暂存区(index):重置到指定
- 工作区(working directory):这次之后的所有变更都撤销到此
当前分支是master,C是最新提交,即HEAD指向C
执行:
$ git reset --mixed HEAD~1
执行后:
①版本库:HEAD指向B;②暂存区:重置到B;③工作区:C撤销到工作区
执行:
$ git status
可以看到C撤销到了工作区,处于"unstage"状态。
3.--hard
- 版本库:HEAD 指向指定
- 暂存区(index):重置到指定
- 工作区(working directory):重置到指定
- 注意:工作区未add的修改和暂存区未commit的修改,全部丢弃。(如果想回到最新提交可用 git reflog 查看commit号 然后再利用本命令恢复)
- eg
当前分支是master,C是最新提交,即HEAD指向C
执行:
$ git reset --hard HEAD~1
执行后:
①版本库:HEAD指向B;②暂存区:重置到B;③工作区:重置到B
执行:
$ git status
可以看到工作空间是干净的