引言

工作中经常会涉及到需要本地代码覆盖更新的操作。有时候可能是从远端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 。

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

  1. Git初学札记(七)————合并分支(merge)

    目录 引言 开始Merge 1.History视图 2.Team菜单 3.Git Repositories视图 巧用Git Staging视图 放弃Merging 可能的Merge结果 引言 Git鼓 ...

  2. git中文件的三种状态

    用xcode的时候,左侧栏文件的邮右边时不时会看到M,A这一类的字母.当然,这些以后再写上.先说一下git里文件的三种状态 已提交(committed)  已经提交的本地仓库(repository), ...

  3. Activity生命周期的三种状态

    生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态.暂停状态和停止状态.接下来将 ...

  4. 敏捷悖论之:站会的三种状态

    敏捷的诡异之处,在于大家讲的可能是同一套术语,但意义不可同日而语. 科层制与敏捷之下,张力.挑战.担当,术语相同,含义不可同日而语.传统是适应领导,敏捷是适应团队.传统是适应领导,敏捷是适应型领导.敏 ...

  5. 举例理解Hibernate的三种状态:瞬时态、持久态、托管(即游离态)态及互相转化

    举例理解Hibernate的三种状态 初学Hibernate,了解到Hibernate有三种状态:transient(瞬时状态),persistent(持久化状态)以及detached(游离状态). ...

  6. CPU被夺走的三种状态 执行时间久了 IO操作让cpu等待 被优先级高的抢占

    CPU被夺走的三种状态   .                           cpu的三种状态之              运行态      就绪态等待被调用             阻塞态 i ...

  7. AntD Checkbox 的三种状态处理

    对于单个 Checkbox 来说,只有两种值:选中 (checked) 或未选中 (unchecked) . 但对于 Checkbox Group 来说,却有三种值:全选 (checked) .部分选 ...

  8. 【SSH】——Hibernate三种状态之间的转化

    Hibernate的三种状态为:transient.persistent和detached.对这三种状态的理解可以结合Session缓存,在Session缓存中的状态为persistent,另外两种不 ...

  9. Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用

    Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...

最新文章

  1. 【设计模式】三大类:创建型模式、结构型模式、行为型模式
  2. 感觉没有学会什么真正的本领
  3. 网络通信-2(TCP通信、ServerSocket、Socket)
  4. ubuntu中解决无法调节屏幕亮度的问题
  5. 5912. 每一个查询的最大美丽值
  6. php 源文件加密工具PHP Screw
  7. 使用trycatch获取异常问题
  8. python画雷达图-python使用matplotlib绘制雷达图
  9. SQL语句:查询语句及多表查询典型例子
  10. smart原则_目标管理:OKR与SMART原则的异同
  11. Spring boot 集成极光推送
  12. word 添加手写签名
  13. 关于贴片机如何获取元件的位置思考
  14. Angular:失焦校验和失焦方法冲突的解决方案 事件循环
  15. ORACLE-EBS常用表
  16. 软考初级信息处理技术员基础知识考点(建议收藏)
  17. Arduino、AB相增量式光电编码器测位移和速度方向
  18. Echarts 当Y轴取值存在正负值的时候,x轴文字与x轴贴合(不在底部显示)
  19. 电脑蓝屏原因?及其解决办法
  20. 一句Json搞定数组中多层字段的替换

热门文章

  1. 4g 中bis代表什么_BIS的完整形式是什么?
  2. 用于数据分析的Python – Pandas
  3. kotlin字符串数组_Kotlin程序读取,遍历,反向和排序字符串数组
  4. 阿里为什么推荐使用LongAdder,而不是volatile?
  5. 几位阿里朋友重写的Java并发编程,牛逼了
  6. C#操作Cookie
  7. Oracle 练习题P256
  8. 二、华为鸿蒙开发DevEco Studio运行第一个Hello World工程
  9. beast单元库的总结
  10. encrypt函数c语言,Crypt加密函数简介(C语言)