Git reset的三种模式 傻傻分不清楚

Posted 高、远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git reset的三种模式 傻傻分不清楚相关的知识,希望对你有一定的参考价值。

【1】关于Git reset有三种模式

  • soft将版本回滚,工作区不动,暂存区=原来的+回滚后和回滚前的版本差异
  • mixed将版本回滚,回滚到了所有 git add 和 git commit 的命令执行之前。暂存区变为空,全部到了工作区
  • hard将版本回滚,将所有工作区和暂存区的文件修改全部清空,是真正的覆盖,不能找回了。

我在使用的时候总是搞不清他们之间到底怎么使用,下面我来说一下


【2】实例手把手讲解

2.1 首先我们新建一个项目

2.2 然后创建Git进行管理

2.3 两次提交方便等会回滚

先初始化提交

可以看到我们提交的信息了


新建分支

添加新文件,然后加入工作区

commit 1

再操作一次。commit 2

然后我们新建一个Test3,但是只存在工作区,不将他加到暂存区中。

看到Test3是变红的就对了,表示没有被git追踪,没有加到缓存区中。

2.4 soft模式讲解:

目前的状态:maser在init上,HEAD指针在dev开发分支上;工作区中有一个Test3没有加到缓存中


打开终端git reset --soft HEAD~ 回退上个版本


发现版本真的回退了,检查工作区和缓存区。

验证了这句话:将版本回滚,工作区不动,暂存区=原来的+回滚后和回滚前的版本差异
暂存区原来的为空+回滚差异那不就是Test2文件吗?ok,soft模式我们验证完了,再来看mixed。


2.5 mixed模式讲解:

我们将文件恢复,reflog,然后reset回去,这里就不演示了。
git reset HEAD~


版本回退了,然后我们看工作区和暂存区。

我们发现暂存区被清空了,没有文件,回滚差别文件放在工作区了,工作区=原来的+回滚差别;
将版本回滚,回滚到了所有 git add 和 git commit 的命令执行之前。暂存区变为空,全部到了工作区


2.6 hard模式讲解:

同样先恢复文件,并且添加一些代码到暂存区

git reset --hard HEAD~


已经回滚,这个不用说,reset本来就用来回滚。

暂存区没了,

Test2也没了

以上是关于Git reset的三种模式 傻傻分不清楚的主要内容,如果未能解决你的问题,请参考以下文章

Git reset的三种模式 傻傻分不清楚

Git reset的三种模式 傻傻分不清楚

GIT科普系列4:仓库/缓冲区/工作副本,傻傻分不清楚?

git reset 的三种模式

63.Git Reset 详解版本回滚的三种模式

x86CPU 实模式 保护模式 傻傻分不清楚? 基于Xv6-OS 分析CR0 寄存器