git reset soft hard mixed 区别

一、关于几个分区的理解

graph LR
工作区-->|git add|暂存区 
暂存区-->|git commit| 版本控制(分支)

1.1 缓冲区

git add //将工作区修改的内容添加到暂存区

版本

1.2 分支

git commit //将暂存区的内容放到分支上

版本

二、git reset

微信截图_20191108164031.png

三、以一个实际的场景来说明这三种方式的区别

1. 创建一个readme.txt文件,并写入Hello World
touch readme.txt && echo 'Hello World' >readme.txt
2. 将readme.txt 添加到缓冲区
git add readme.txt
3. 将readme.txt 提交到分支上
git commit -m '第一次提交'
4. 修改readme.txt内容为Hello World git
echo 'Hello World git' > readme.txt
5. 再次提交
git commit -am '第二次提交'
6. 查看git日志
$ git log
commit da464edc6e7ed9768d619d1ea5b61cbcf0dc48c4 (HEAD -> master)
Author: 吴哲 <wuzhe1159@163.com>
Date:   Fri Nov 8 15:39:54 2019 +0800

    '第二次提交'

commit d719960a7d3422280bdf749448caf79010bfdb3b
Author: 吴哲 <wuzhe1159@163.com>
Date:   Fri Nov 8 15:25:30 2019 +0800

    '第一次提交'
7.执行回退操作git reset --soft,并查看git状态发现文件只需要提交,不需要添加到暂存区中
$ git reset --soft d719960a7d3422280bdf749448caf79010bfdb3b
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   readme.txt
8. 查看文件 文件内容没有修改
$ cat readme.txt
'Hello World git'

9. git reset --soft 将HEAD指向指定回退的分支上,但是暂存区和工作目录没有发生修改,回到之前的状态,只需要再次commit这个文件就可以了
10. 将文件再次提交之后,查看git日志
$ git commit -m '第三次提交'
[master 832e7e7] '第三次提交'
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git log
commit 832e7e768ff99e740b64541d23cdb314db027f87 (HEAD -> master)
Author: 吴哲 <wuzhe1159@163.com>
Date:   Fri Nov 8 15:51:55 2019 +0800

    '第三次提交'

commit d719960a7d3422280bdf749448caf79010bfdb3b
Author: 吴哲 <wuzhe1159@163.com>
Date:   Fri Nov 8 15:25:30 2019 +0800

    '第一次提交'
11. 执行第二次回退操作git reset -mixed,查看git 状态,因为mixed是git reset的默认模式,所以可以不添加mixed
$ git reset d719960a7d3422280bdf749448caf79010bfdb3b
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")
$ cat readme.txt
'Hello World git'
12. git 状态告诉我们需要添加到缓冲区并提交,查看文件的时候文件的内容没有发生改变,说明暂存区发生了改变,文件目录没有发生改变,我们回复之前的状态,需要再次添加和提交
13. git reset --hard 进行回退操作
$ git log
commit df64e2f8ccdf46dca8c67f92829de3ec263555c8 (HEAD -> master)
Author: 吴哲 <wuzhe1159@163.com>
Date:   Fri Nov 8 16:02:48 2019 +0800

    '第四次提交'

commit d719960a7d3422280bdf749448caf79010bfdb3b
Author: 吴哲 <wuzhe1159@163.com>
Date:   Fri Nov 8 15:25:30 2019 +0800

    '第一次提交'

D:\tmp\git_test (master -> origin)
$ git reset --hard  d719960a7d3422280bdf749448caf79010bfdb3b
HEAD is now at d719960 '第一次提交'

D:\tmp\git_test (master -> origin)
$ git status
On branch master
nothing to commit, working tree clean
$ cat readme.txt
'Hello World'
14. 通过git状态和查看文件,发现文件目录已经发生改变,执行完这个命令,之前将之后的提交内容全部删除,这个命令改变内容幅度最大

四、总结

1.mixed
  • 将HEAD指向需要恢复的commit上,暂存区和工作目录都不生改变
2.soft
  • 只是将HEAD指向需要恢复的commit上,在分支上内容退回到暂存区,工作目录没有发生改变
3.hard
  • HEAD指向需要恢复的commit,全部恢复恢复的commit的样子,之前的commit全部删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值