git reset 进阶

命令:

git reset [--hard | soft | mixed | merge | keep ]git

做用:

将当前分支重设到指定的<commit>(默认是HEAD,即最新提交)。而且根据[mode]参数能指定重置(reset)idex或是working directory。ide

mode详解:

1.--softspa

  • 版本库(repository):HEAD 指向指定<commit>3d

  • 暂存区(index):不重置到指定<commit>,此次<commit>以后的全部变动都撤销到此blog

  • 工做区(working directory):无变化rem

  • egit

当前分支是master,<commit>C是最新提交,即HEAD指向<commit>C
image.pngast

执行:class

$ git reset --soft HEAD~1im

执行后:
image.png

①版本库: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
image.png

执行:

$ git reset --mixed HEAD~1

执行后:
image.png

①版本库: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
image.png

执行:

$ git reset --hard HEAD~1

执行后:
image.png

①版本库:HEAD指向<commit>B;②暂存区:重置到<commit>B;③工做区:重置到<commit>B

执行:

$ git status

能够看到工做空间是干净的

4.--merge

  • 不经常使用

5.--keep

  • 不经常使用

相关文章
相关标签/搜索