git reset 进阶

命令:

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 进阶》

执行:

$ git reset –soft HEAD~1

执行后:
《git reset 进阶》

①版本库: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 进阶》

执行:

$ git reset –mixed HEAD~1

执行后:
《git reset 进阶》

①版本库: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 进阶》

执行:

$ git reset –hard HEAD~1

执行后:
《git reset 进阶》

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

执行:

$ git status

可以看到工作空间是干净的

4.–merge

  • 不常用

5.–keep

  • 不常用

    原文作者:April
    原文地址: https://segmentfault.com/a/1190000012071372
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞