git reset 的三种模式的使用场景

一、前提

参考:建议先阅读:Git Reset 三种模式

这篇文章只是我的的一个笔记

二、三种模式

  • git reset --soft
  • git reset --mixed
  • git reset --hard
    img

这三个模式理解了,对于使用这个命令很有帮助。在理解这三个模式之前,需要略微知道一点Git的基本流程。正如上图,Git会有三个区域:

  • Working Tree 当前的工作区域
  • Index/Stage 暂存区域,和git stash命令暂存的地方不一样。使用git add xx,就可以将xx添加近Stage里面
  • Repository 提交的历史,即使用git commit提交后的结果

三、reset三种模式区别和使用场景

1.--soft

--soft 重置位置的同时,保留working Tree工作目录index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。

场景1:当你连续commit多个版本时,觉得这几个commit提交不具有太大意义,可以通过git reset --soft 版本号将这些commit合并为一个commit进行提交。

步骤:

  • git reset --soft回退版本

  • git commit提交到本地仓库

  • git push提交到远程仓库

    a)这里准备了几个历史commit提交进行测试

    image-20210707201621266

    b)回退版本,通过git reset --soft 版本号回退,然后强制进行提交

    $ git log -3   #查看历史提交记录
    commit 09727f64ca0d422e5aa90e1838f8b1249fea1a9a (HEAD -> master, origin/master, origin/HEAD)
    Date:   Wed Jul 7 20:10:20 2021 +0800
    
        提交4
    
    commit 5193b8066585f387d391b5dd900e5a305be79dbb
    Date:   Wed Jul 7 20:09:01 2021 +0800
    
        提交3
    
    commit 63b99f3c46f8259a28bce0d860d3e66a626f744e
    Author: sunchao <15292080775@163.com>Date:   Wed Jul 7 20:08:48 2021 +0800
    
        提交2
    $ git reset --soft 63b99f3c46f8259a28bce0d860d3e66a626f744e		#回退到历史版本2
    
    $ git commit -m "提交4"	#添加到本地仓库
    
    $ git push --force		 #强制提交
    

    此时再来看版本信息,提交2已经被覆盖了

    image-20210707203053114

场景2:当我们commit一个提交,但是这个提交并没有被push,我们不需要这个commit,可以通过git reset --soft清除这个没有pushcommit

a)这里提交commit了一个未push的提交

![image-20210707203528618](https://img-blog.csdnimg.cn/img_convert/a020eaedffcbee5a48e7d7354f8db153.png)

b)通过git reset --soft 版本号进行回退

$ git log -2
commit f540f2be7c765da3b88e8a0a385d0d4ce9650583 (HEAD -> master)
Date:   Wed Jul 7 20:35:16 2021 +0800

    提交5

commit 0a8f7ec9d568e16766aef5e35e6513f92aa76306 (origin/master, origin/HEAD)
Date:   Wed Jul 7 20:27:44 2021 +0800

    提交4

$ git reset --soft 0a8f7ec9d568e16766aef5e35e6513f92aa76306  #回退到提交4

可以发现,这个没有pushcommit已经不存在了

image-20210707204124064

2.--mixed

--mixed 重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。

场景:场景:当你连续commit多个版本时,觉得这几个commit没有意义可以合并时,通过git reset --mixed版本号进行回退,与--soft模式相比,在commit到本地仓库之前需要git add 操作将变动的内容添加到暂存区。

步骤:

  • git reset回退版本

  • git add .将变动的内容添加到暂存区

  • git commit提交到本地仓库

  • git push提交到远程仓库

    a)测试日志记录如下

    image-20210707204505825

    b)通过git reset --soft 版本号进行回退

    $ git log -3			#查看历史记录
    commit e5b2ba1742b1c0223ff21c13603a7d1b6bec6ff0 (HEAD -> master, origin/master, origin/HEAD)
    Date:   Wed Jul 7 20:44:05 2021 +0800
    
        提交5
    
    commit 0a8f7ec9d568e16766aef5e35e6513f92aa76306
    Date:   Wed Jul 7 20:27:44 2021 +0800
    
        提交4
    
    commit 63b99f3c46f8259a28bce0d860d3e66a626f744e
    Date:   Wed Jul 7 20:08:48 2021 +0800
    
        提交2
    
    $ git reset 63b99f3c46f8259a28bce0d860d3e66a626f744e		#回退到提交2
    Unstaged changes after reset:
    M       README.md
    
    $ git add .		#将修改内容添加到暂存区			
    
    $ git commit -m "测试提交5"			#提交到本地仓库
    [master dc8407a] 测试提交5
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    $ git push --force		#强制提交
    

    image-20210707205344983

3.--hard

--hard:重置位置的同时,直接将 working Tree工作目录index 暂存区repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。

场景:要放弃目前本地的所有改变時,即去掉所有add到暂存区的文件和工作区的文件,可以执行 git reset -hard HEAD 来强制恢复git管理的文件夹的內容及状态;真的想抛弃目标节点后的所有commit(可能觉得目标节点到原节点之间的commit提交都是错了,之前所有的commit有问题)

步骤:

  • git reset --hard回退版本

  • git commit提交到本地仓库

  • git push提交到远程仓库

    a)测试日志
    image-20210707205617991

    b)git reset -hard 版本号 进行回退

    $ git log -3
    commit 167c5f9b9d60e270e7850004fd0dd7f9fe5131d3 (HEAD -> master, origin/master, origin/HEAD)
    Date:   Wed Jul 7 20:56:03 2021 +0800
    
        提交6
    
    commit dc8407a1f9a68cdc2f66b53299d8030ee62bfdba
    Date:   Wed Jul 7 20:49:35 2021 +0800
    
        测试提交5
    
    commit 63b99f3c46f8259a28bce0d860d3e66a626f744
    Date:   Wed Jul 7 20:08:48 2021 +0800
    
        提交2
        
    $ git reset --hard dc8407a1f9a68cdc2f66b53299d8030ee62bfdba
    HEAD is now at dc8407a 测试提交5
    
    

    c)查看差异
    image-20210707210223158
    ba结尾的版本就是我们回退的版本,说明工作目录已经回退
    image-20210707210332694
    d) 此时我们可以修改以后再次提交

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值