一、前提

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

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

二、三种模式

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

这三个模式理解了,对于使用这个命令很有帮助。在理解这三个模式之前,需要略微知道一点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提交进行测试

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

    $ git log -3   #查看历史提交记录
    commit 09727f64ca0d422e5aa90e1838f8b1249fea1a9a (HEAD -> master, origin/master, origin/HEAD)
    Date:   Wed Jul 7 20:10:20 2021 +0800提交4commit 5193b8066585f387d391b5dd900e5a305be79dbb
    Date:   Wed Jul 7 20:09:01 2021 +0800提交3commit 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已经被覆盖了

场景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提交5commit 0a8f7ec9d568e16766aef5e35e6513f92aa76306 (origin/master, origin/HEAD)
Date:   Wed Jul 7 20:27:44 2021 +0800提交4$ git reset --soft 0a8f7ec9d568e16766aef5e35e6513f92aa76306  #回退到提交4

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

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)测试日志记录如下

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

    $ git log -3            #查看历史记录
    commit e5b2ba1742b1c0223ff21c13603a7d1b6bec6ff0 (HEAD -> master, origin/master, origin/HEAD)
    Date:   Wed Jul 7 20:44:05 2021 +0800提交5commit 0a8f7ec9d568e16766aef5e35e6513f92aa76306
    Date:   Wed Jul 7 20:27:44 2021 +0800提交4commit 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] 测试提交51 file changed, 1 insertion(+), 1 deletion(-)$ git push --force      #强制提交
    

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)测试日志

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

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

    c)查看差异

    ba结尾的版本就是我们回退的版本,说明工作目录已经回退

    d) 此时我们可以修改以后再次提交

git reset 的三种模式的使用场景相关推荐

  1. Git之Reset的三种模式

    前言 使用场景:当commit的内容有错误,需要回撤到之前的某个版本时. git reset一句话概括: git-reset - Reset current HEAD to the specified ...

  2. a commit git 参数是什么意思_Git中的git reset的三种参数的区别

    我们平时在使用git的时候,经常会遇到需要撤销上次操作的需求,这时候需要用到git reset的这个命令,他的使用就是 "git-reset – Reset current HEAD to ...

  3. .net core 注入中的三种模式:Singleton、Scoped 和 Transient

    从上篇内容不如题的文章<.net core 并发下的线程安全问题>扩展认识.net core注入中的三种模式:Singleton.Scoped 和 Transient 我们都知道在 Sta ...

  4. git reset三种模式区别和使用场景(hard,soft,mixed)

    简单的理解三种模式: hard reset之后,以仓库为准,仓库,暂存区和工作区保持一致,不一致的全部清除: soft reset之后,工作区内容不变,只更新仓库内容,差异保留在index暂存区: m ...

  5. mysql binlog 权限_MySQL如何开启binlog?binlog三种模式的分析

    前提,创建表t,并插入数据,语句如下: CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `t_modified` ...

  6. 分布式事务讲解 - TX-LCN分布式事务框架(含LCN、TCC、TXC三种模式)

    分布式事务讲解 - TX-LCN分布式事务框架(含LCN.TCC.TXC三种模式) 分布式事务系列博客: TX-LCN框架原理 LCN 原理及主要特点 代码实现 实现场景 创建数据库及表(三个数据库, ...

  7. Oracle 11g dataguard三种模式以及实时查询(Real-time query)功能设置

    之前我们讨论过<Linux Oracle 11g dataguard物理standby 配置过程>, 但是在实际过程中会遇到不同的问题,首先我们讨论下ORACLE DATAGUARD的三种 ...

  8. SAP EWM 与 AGV 机器人对接的三种模式

    SAP EWM 与 AGV 机器人对接的三种模式 https://mp.weixin.qq.com/s/xGfUMSBTEMYKce5oXcWDqA 导读    本文转载自:弘毅供应链,跟随供应链专家 ...

  9. Tomcat三种模式及配置APR模式

    为什么80%的码农都做不了架构师?>>>    Tomcat三种模式 Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下: 这三种模式的不同之处如 ...

最新文章

  1. [device]/proc/devices and /dev/
  2. 历史性难题——如何为Kafka挑选合适的分区数?
  3. CentOS6.3 Samba安装配置、多用户、加域
  4. C语言经典例21-猴子吃桃问题
  5. [转]redis 5.0.5 5分钟搭建redis集群
  6. 查看linux系统版本信息(Oracle Linux、Centos Linux、Redhat Linux、Debian、Ubuntu)
  7. (王道408考研操作系统)第三章内存管理-第一节6-1:非连续分配管理方式之基本分页存储管理
  8. 电路理论与linkage Mapper的安装
  9. 02024_自定义异常的练习
  10. Java实训项目11:GUI学生信息管理系统 - 实现步骤 - 创建服务接口
  11. video4linux(v4l)使用摄像头的实例基础教程与体会
  12. mybatis-plus 会自动增加 order by_自动化常见问题:SCL、变压器、欧姆龙软件、机器人控制分享...
  13. java byte binary_java byte 与 binary 转换
  14. 机器学习问题的十个实例
  15. 【回归预测】基于matlab麻雀算法优化相关向量机RVM回归预测【含Matlab源码 1750期】
  16. 安装SVN及安装语言包
  17. 【码学堂】教师如何在码学堂上组织教学活动?
  18. macOS 10.15 Catalina 获取App Store下载的安装包
  19. linux QT 结束当前进程_Qt与Web混合开发(一)--简单使用
  20. 请说一下你是如何理解互联网思维的?

热门文章

  1. 【Unity Editor工具制作-文本转UTF-8编码、用WPS表格打开表格、用WPS表格打开】
  2. 大律法(OTSU) ——图像数据二值化
  3. 【Python】EasyDict:Make Dictionary Easier
  4. 用AI赋能客服,灵声科技获数千万元A轮融资
  5. 阿里云服务器centos系统部署httpd服务器(新手向网页搭建教程)
  6. Python 探索 Tello 无人机的奇妙世界
  7. 在docker中使用U盘
  8. mysql截取前几个字符串_MySql中截取字符串中的某几个字符
  9. 理解C语言编译流程(附编译命令)
  10. Safari浏览器自动刷新页面插件Auto Refresh