前言

  • 使用场景:当commit的内容有错误,需要回撤到之前的某个版本时。
  • git reset一句话概括:
  • git-reset - Reset current HEAD to the specified state
    意思是可以让HEAD这个指针指向其他的地方。例如我们有一次commit不是不是很满意,需要回到上一次的Commit里面。那么这个时候就需要通过reset,把HEAD指针指向上一次的commit的点。
    `

Git Reset的三种模式

Git Reset有三种模式,soft,mixed,hard,具体的使用方法如下面这张图

注,Git一般划分为3个区域,working directory 为当前工作区、stage/index为暂存区(git add后的代码就会存储在这部分)、repository则记录提交的历史(git comment后的代码会存在这里)。3个区域关系如下图所示

1. reset --hard:重置stage区和工作目录:

reset --hard 会在重置 HEAD 和branch的同时,重置stage区和工作目录里的内容。当你在 reset 后面加了 --hard 参数时,你的stage区和工作目录里的内容会被完全重置为和HEAD的新位置相同的内容。(三个区域全变且一致)

例:你在上次 commit 之后又对文件做了一些改动:把修改后的ganmes.txt文件add到stage区,修改后的shopping list.txt保留在工作目录

git status

# 你的 HEAD 和当前 branch 回滚到上一条commit同时,stage区和工作区的改动也全消失了
git reset --hard HEAD^6
git status

2.reset --soft:保留工作目录,并把重置 HEAD 所带来的新的差异放进暂存区

reset --soft 会在重置 HEAD 和 branch 时,保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区。(working directory 内容不变,repository与目标节点一致,stage/index新增repository在两个版本的差异)

例:把修改后的ganmes.txt文件add到stage区,修改后的shopping list.txt保留在工作目录

git status


此时当前 commit 的改动内容是新增了 laughters.txt 文件

git show --stat

# 你的 HEAD 和它所指向的 branch 被移动到 HEAD^ 之外,原先 HEAD 处 commit 的改动(也就是那个 laughters.txt 文件)也会被放进暂存区
git reset --soft HEAD^
git status

3.reset 不加参数(mixed):保留工作目录,并清空暂存区

reset 如果不加参数,那么默认使用 --mixed 参数。它的行为是:保留工作目录,并且清空暂存区。也就是说,工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录。简而言之,就是「把所有差异都混合(mixed)放在工作目录中」。

例如上述情况:

git status


修改 的games.txt 和 shopping list.txt,并把 games.txt 放进了暂存区。

git show --stat

git reset HEAD^
git reset --mixed HEAD^

`
工作目录的内容和 --soft 一样会被保留,但和 --soft 的区别在于,它会把暂存区清空,并把原节点和reset节点的差异的文件放在工作目录,总而言之就是,工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录

git status

总结

区别
  1. –hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。
  2. –soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。
  3. –mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。
使用场景
  1. –hard:(1)放弃本地的所有改变,即去掉所有add到暂存区的文件和工作区的文件;(2) 抛弃目标节点后的所有commit(之后所有的commit都不对)。
  2. –soft:合并差异不大的commit,使整个演进线图更清晰。
  3. –mixed(默认):(1)与2类似,合并相似的commit;(2)移除暂存区中的内容。(3)commit提交某些错误代码,不想再修改错误再commit(因为会留下一个错误commit点),可以回退到正确的commit点上,然后所有原节点和reset节点之间差异会返回工作目录,假如有个没必要的文件的话就可以直接删除了,再commit上去就OK了。

参考:Git Reset 三种模式

Git之Reset的三种模式相关推荐

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

    一.前提 参考:建议先阅读:Git Reset 三种模式 这篇文章只是我的的一个笔记 二.三种模式 git reset --soft git reset --mixed git reset --har ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 宠物乘机的三种模式【转】

    几天前微博用户@HUST_维维豆奶在网上控诉,他搭乘东航MU2544次航班(上海浦东-武汉)时,托运的金毛犬在天河机场被打成重伤(附1).机场方面给出了官方回应(附2与附3),并且已向事主支付了五万元 ...

最新文章

  1. 21个UI设计必会的设计技巧
  2. 谷歌推出数据集搜索专用引擎Dataset Search
  3. 每三个数换行 用C语言表示,关于换行符:使用fscanf()读取每行3个数字的文件,为什么“%d%d%d%* c”和“%d%d%d”一样好?...
  4. c#,将pdf文件转换成图片文件。
  5. Android---AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
  6. pipelineDB学习笔记-2. Stream (流)
  7. cuda的global memory介绍
  8. WinForm和WPF使用log4net
  9. 量化投资知识,量化交易
  10. 松下A6驱动面板操作参数设置与保存
  11. 2008年9月23号,星期二,晴。博观而约取,厚积而薄发。(苏轼)
  12. 使用grub启动虚拟软盘的方法
  13. ue4 c++绘线 DrawLine
  14. 神来之笔-线程变量实践
  15. esp8266+arduino+网页配网+温湿度上传+温度控制开关+eeprom永久保存+微信小程序控制
  16. NVIDIA Jetson TK1学习与开发——手动刷机
  17. 红孩儿编输器的模块设计14
  18. 米思齐呼吸灯与可调节灯实验
  19. URL ASCII编码解码
  20. 运算库之numpy(数组的切片操作和数组shape的转换)

热门文章

  1. MySQL 8.0窗口函数
  2. 〖Demo〗-- 模拟登录
  3. SQL server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法...
  4. ASP.NET页面间的传值的几种方法
  5. 在Tomcat上部署WebService服务
  6. [案例]某体育用品公司在零售领域BI的产品应用解决方案
  7. python分析数据走势_python数据分析应用 - 近5年八类资产价格走势分析
  8. render_notebook()结果没有图_数与图(20)——机器学习.下
  9. tomcat 启动需要java环境吗?_三分钟教你Windows环境下,如何设置Tomcat随机自动启动?...
  10. debian apt-get php,Debian系统apt-get命令整理