Git 初学札记(十)—— Reset 回退的三种状态解析

引言

工作中经常会涉及到需要本地代码覆盖更新的操作。有时候可能是从远端git 上直接覆盖更新,或者是其他本地分支覆盖更新当前分支等等。这个时候就需要用到 reset 操作。

reset 操作分为三种类型:Soft、Mixed、Hard。今天我们就来说说这三种类型究竟如何使用。

一、Git 提交的三种状态

在解释 reset 的三种类型之前,我们需要了解 Git 提交的三种托管状态。不论你是用命令行,还是用图形化界面,都是如此。

第一种状态是“未暂存”、第二种状态是“已暂存”、第三种状态是“已提交”。

“未暂存”状态,是一种代码刚刚被修改过的状态。Git 不会记录你未暂存状态下多次修改之间的区别,它可以比较未暂存的代码与已提交代码之间的差异。

“已暂存”状态,是一种 Git 对修改代码进一步托管的状态,Git 管暂存区叫 Index。在 Index 区中的代码可以理解为处于一种即将提交的状态。

“已提交”状态,是一种 Git 对修改代码完成追踪的状态,Git 会记录本次提交,同时在时间线上生成一条 commit 记录,每条 commit 记录都会有一个唯一的 commit Id 。 

如何理解提交的三种状态?我们可以以电商购物为例,来打个比方:

当我们浏览到我们喜欢的商品,给他们添加了一些备注或者将他们收藏,可以理解为一种简单的修改,那么此时,该商品已经处于“未暂存”状态。

如果我们对收藏的商品情有独钟,我们可以将 购物车理解为 暂存区(Index),将商品加入购物车的操作就可以理解为将修改代码添加到暂存区,此时商品就处于“已暂存”状态。

终于,我们下定决心购买这件商品,填写了必要的购买信息,比如电话、收货地址等后,点击付款,于是商品就处于了一种“已提交”的状态,并生成了一条订单号,可以类比我们的 commit id。

针对图形化的界面,如 Eclipse 中的 Git 插件,我们可以看到这样的区域:

二、Reset 三种类型

Reset 需要有一个参考标准,可以是本分支的其他提交点,也可以是本地其他分支的提交点,也可以是远程分支上的提交点。

比如,如果你希望直接将远程分支直接覆盖到本地,那么reset 的参考系就是远程分支上的最新一次 提交点。

当我们打开 Reset 对话框,可以看到我们需要选择的参考系,我们此时可以选择远程分支的最新提交点作为 reset 的参考系,在选择 Reset type 的时候,有三种选项:

Soft ,意思是只回退 HEAD 指针,HEAD 指针是 Git 在提交时间线上的某一个 提交点,一般而言,HEAD 和最新的提交是一致的。因为 git 有三级提交机制,因此 Soft 只回退 HEAD 的话,会回退与参考系提交点不同的所有提交记录,但暂存区和未暂存区会保留全部修改,同时被回退的提交记录中的所有修改会全部回退到暂存区。可以将 Soft 简单理解为将所有提交退回到暂存区,所有修改都会保留。

Mixed,意思是回退 HEAD 和 暂存区。即与参考提交点不同的所有提交,以及所有暂存区中未提交的修改,会全部回退到未暂存区。这是比较常用的 Reset 类型,它既会保留你的全部修改,同时又统一回退到所有代码“未暂存”状态

Hard ,意思是强制回退或覆盖本地全部代码。这种回退类型不仅会回退与参考提交点不同的全部提交的代码,同时也会回退暂存的和未暂存的代码,将本地的全部代码与参考提交点完全保持一致,并且抛弃所有修改,不做保留。一般如果想直接覆盖本地代码,就可以选择 Hard 类型来操作。

总结

Reset 三种类型包括 Soft、Mixed、Hard。

从回退的力度来讲 Soft —> Mixed—> Hard 依次加重,分别对应

回退“已提交”—> 回退“已提交+已暂存”—> 回退“已提交+已暂存+未暂存”

两种常用场景:

1、如果想回退所有本地与远程不同的 commit ,同时又保留所有修改,可以选择 Soft 或 Mixed,推荐 Mixed。

2、如果想覆盖或回退本地代码,又不需要保留任何本地修改,可以选择 Hard 。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 高级 —— 深入理解 InnoDB 与 MyISAM

引言 在文件系统中,MySQL将每个数据库(也可以称之为schema)保存为数据目录下的一个子目录。创建表时,MySQL会在数据库子目录下创建一个与表同名的.frm文件保存表的定义。因为MySQL使用文件系统的目录和文件来保存数据库和表的定义…

关于 OutOfMemoryError 的总结与解决方法

引言 本文总结自周志明的《深入理解Java虚拟机》第二章部分内容。 这部分内容,可以为后续性能调优方面的工作起到铺垫作用。 一、什么是 OutOfMemoryError OurOfMemory 简称“OOM”, 直译为“内存耗尽”或“内存溢出”,当然,并…

Windows误关闭资源管理器重启的办法

引言 有时候Windows系统在开机后,在桌面底部的任务栏中无法正常加载必要的网络连接图标或音量图标等,导致无法手动操作音量或连接网络。这时候就会需要打开“任务管理器”重新启动“资源管理器”使其重新加载这些必要的控制图标。 但是由于操作失误&am…

MySQL高级 —— 高性能索引

引言 最近一直在抱着《高性能MySQL(第三版)》研究MySQL相关热点问题,诸如索引、查询优化等,这阶段的学习是前一段时间MySQL基础与官方的“阅读理解”的进一步延伸。 书中第五章详细阐述了如何设计高性能的索引,以及索…

MySQL高级 —— 查询性能优化

引言 承接《MySQL高级 —— 高性能索引》,本篇博客将围绕《高性能MySQL(第三版)》第六章内容进行总结和概括。 与索引的部分一样,SQL优化也是广大程序员深入MySQL的又一条必经之路。希望通过本篇博客的总结,能够为我…

Java常用设计模式————适配器模式

引言 由于无法直接使用某个类中的方法而采取的一种中间类转换的策略。将一个类的接口转换成另一个接口,让原本接口不兼容的类可以兼容。 适配器模式可以分为三种:类适配器、对象适配器、接口适配器。它们之间的区别主要体现在适配器角色与被适配角色之…

Java常用设计模式————桥接模式

引言 在实际的业务中,经常会遇到多维度的概念组合,公园的门票,颐和园有年票、月票、日票,故宫也有年票、月票、日票。那么不同的公园和票种类型就可以视为两种不同的纬度,它们之间会形成相互组合的关系。 在类的设计…

Java常用设计模式————装饰者模式

引言 装饰者模式,又叫装饰器模式。它可以动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更灵活,同时装饰者模式也体现了OCP原则。 在客户端调用使用了装饰者模式的对象时,就好像在使用构造器层层包裹核心对象&#x…

Java常用设计模式————组合模式

引言 组合模式,是一种类似递归算法的结构性设计模式,通过以简单的 List ,组合本类对象,实现树状对象结构的“部分、整体”的层次。 它可以让调用程序不需要关心复杂对象与简单对象的区别,而统一地实现处理逻辑。 对…

Java常用设计模式————外观模式

引言 外观模式(Facade Pattern),又叫“过程模式”。外观模式为子系统中的一组接口提供一个一致的入口,此模式定义了一个高层接口,这个接口使得这一组子系统更加易用。 一、案例分析 生活中有很多类似的案例&#xf…

Java常用设计模式————享元模式

引言 享元模式,也叫蝇量模式(Flyweight Pattern)。运用共享技术有效地支持大量细粒度的对象。 享元模式常用于系统底层开发,解决系统的性能问题。例如数据库连接池,里面都是创建好的连接对象,在这些连接对…

IDEA——常用基础设置

一、设置入口 File—>Settings... 或者 在工具栏的“小扳手”图标。 二、主题设置 三、编辑通用设置 设置面板中的 Editor 3.1 自动导包 可以设置IDEA自动为程序导包,在书写时加入准确的导包,在书写时优化导包(自动去掉未使用的&#…

IDEA——常用快捷键

引言 总结 IDEA 的常用快捷键,除了部分快捷键与 Eclipse 保持一致之外,枚举更多的实用快捷键。 一、如何设置快捷键 在 Settings -> Keymap 中,下拉框里选择 Eclipse ,即可将 IDEA 的快捷键设置为与 Eclipse 保持一致。但并…

IDEA——常用代码模板

引言 IDEA 提供了一些内置的代码模板,可以让开发者快速方便的使用,当然 eclipse 中也是有的,比如输入 syso 快速生成输出语句,main 快速生成主函数等。 idea 的模板设置都在 Settings --> Live Templates 和 General-->Po…

IDEA——Git 的设置与使用

引言 在本机下载好 Git 之后,再去在 IDEA 中设置 Git 相关的参数。详细的 Git 操作和 Eclipse 大同小异,可以移步至:《Git必知必会》 一、设置Git执行程序路径 二、导入一个新的远程 git 托管项目 打开 File ——> New ——> Project…

IDEA——Maven的配置与使用

引言 简单介绍一下如何在 idea 中配置maven,以及如何去使用 maven 。 一、配置 Maven home Maven home 和 settings 文件一般都需要进行重新设置,关联到本机已经安装好的 maven 版本,settings 这里可以使用默认,也可以设置为 ma…

Spring Cloud Alibaba——Nacos实现服务治理

引言 本博客总结微服务开发中各个微服务调用的实现,并使用 Nacos 完成服务注册和发现。 文章中会涉及到 maven 的使用,以及 spring boot 的一些知识。开发工具采用 IDEA 2020.2。 设计一个电商订单和商品购买微服务,实现微服务的注册发现与…

Spring Cloud —— Feign 实现服务调用

引言 本篇博客简单介绍 Feign 的基础知识和基本应用,以前一篇博客《Spring Cloud Alibaba——Nacos实现服务治理》为代码基础,实现更简单的微服务调用方式。 一、什么是Feign restTemplate 实现的微服务调用方式: // 调用商品微服务&…

Spring Cloud —— 负载均衡与 Ribbon 应用

引言 本篇博客简单介绍微服务负载均衡的概念,并通过 IDEA 多端口启动应用的方式,模拟多个应用实例,使用自定义和 Ribbon 两种方式实现基本的负载均衡策略。 微服务代码以《Spring Cloud Alibaba——Nacos实现服务治理》为基础。 一、什么是…

Spring —— 容器内部逻辑

引言 上一篇关于IoC容器的详解《Spring —— IoC 容器详解》真是工程浩大,可以说Spring官网对核心中的核心IOC容器做了非常全面的使用说明,包括在《Spring揭秘》中让我一直没有成功的Method Injection,官网也解决了我的疑惑,并最…