在Git中进行版本回退需要使用git reset命令。

以前面文章中的示例为例,当我准备在V4版本,回退到V3版本的时候,分支中的提交和工作目录中文件的状态,如下图所示:

我们分别执行了三种回退方式:

  • git reset --soft HEAD^:温柔的回退。
  • git reset --mixed HEAD^:中等回退。
  • git reset --hard HEAD^:强硬的回退。

(我们从英文中就可以看出,一个比一个回退的多。)

下面我们一一进行总结。

1、--soft回退说明

当我在V4版本的时候,执行git reset --soft HEAD^命令回退到V3版本。

Git中发生的变化如下图所示:

依据上图,理解一下发生的事情:本质上就发生了,把HEAD指针指向了V3版本。而工作区和暂存区中的readme.txt文件是没有做任何变动的。

所以你查看本地版本库中的readme.txt文件是V3版本,工作区和暂存区中的readme.txt文件是V4版本。

就等于回滚到了git commit之前的状态。

(我前面文章中有详细的演示)

拓展:

当我继续修改readme.txt文件之后,再次提交,会在V3版本之上在创建一个新的commit提交,并移动HEAD指针指向的分支来使其指向该commit提交,这样依次提交下去,如下图所示:

如果我们使用git log命令查看本地版本库的历史提交信息的时候,就不会出现V4版本提交的信息。会是V1、V2、V3、V5。(我们从前面文章中已经演示了)

但是V4版本是不会在Git中删除的,会永远的存储在Git的本地版本库中。我们可以使用git reflog命令,可以查看该V4版本的提交信息。

提示:只要是本地版本库中HEAD有过的变化,那么git reflog命令就能够显示出来。

(关于这点,下面同理,所以下面就不说了。)

2、--mixed回退说明

当我在V4版本的时候,执行git reset --mixed HEAD^命令回退到V3版本。

Git中发生的变化,如下图所示:

理解一下发生的事情,我们可以看到上图中,完成了两步操作:

  1. 把HEAD指针指向了V3版本(也就是版本库回退了)。
  2. 把暂存区中的readme.txt文件也回退到了V3版本。

而只有工作区中的readme.txt文件内容没有变化。

这说明git reset --mixed命令比git reset --soft命令,多回退了暂存区中的内容。

就等于回滚到了git commit和git add之前的状态。

(我前面文章中有详细的演示)

提示:因为--mixed参数是git reset命令的默认选项,也就是不写任何参数就默认使用--mixed参数。即git reset HEAD^等同于git reset --mixed HEAD^命令

3、--hard回退说明

当我在V4版本的时候,执行git reset --hard HEAD^命令回退到V3版本。

Git中发生的变化,如下图所示:

理解一下发生的事情,我们可以看到上图中,完成了三步操作:

  1. 把HEAD指针指向了V3版本(也就是版本库回退了)。
  2. 把暂存区中的readme.txt文件也回退到了V3版本。
  3. 把工作区中readme.txt文件的修改也复原了。

所以执行完git reset --hard HEAD^命令,是完全回退一个版本。

此时工作区、暂存区、本地版本库中的文件状态都是一致的,都是V3版本。

就等于回滚了一个“编辑文件,添加到暂存区,提交版本库”的整个流程。

(我前面文章中有详细的演示)

4、总结

必须注意:

--hard参数是git reset命令唯一的危险用法,是能够使Git会真正地销毁数据的仅有的几个操作之一。

其他任何形式的git reset操作都可以轻松撤消,但是--hard选项不能,因为它强制覆盖了工作目录中的文件。

在这种特殊情况下,我们的Git数据库中的一个提交内,还留有该文件的V4版本,我们可以通过git reflog来找回它。但是若该文件还未提交,Git仍会覆盖它从而导致无法恢复。

『现学现忘』Git后悔药 — 31、reset版本回退命令总结的更多相关文章

  1. 『现学现忘』Git后悔药 — 27、版本回退介绍

    目录 1.什么版本回退 2.需要了解两个知识点 (1)HEAD是什么 (2)HEAD指针用法 3.git reflog命令介绍 1.什么版本回退 版本回退也可以叫回滚. 若修改过的文件,不仅添加到了暂 ...

  2. 『现学现忘』Git后悔药 — 28、版本回退git reset --soft命令说明

    git reset --soft commit-id命令:回退到指定版本.(soft:柔软的) 该命令仅仅修改分支中的HEAD指针的位置,不会改变工作区与暂存区中的文件的版本. 实现上是只做了一件事情 ...

  3. 『现学现忘』Git后悔药 — 29、版本回退git reset --mixed命令说明

    git reset --mixed commit-id命令:回退到指定版本.(mixed:混合的,即:中等回退.) 该命令不仅修改了分支中HEAD指针的位置,还将暂存区中数据也回退到了指定版本. 但是 ...

  4. 『现学现忘』Git后悔药 — 30、版本回退git reset --hard命令说明

    git reset --hardcommit-id命令:回退到指定版本.(hard:强硬,严格的回退) 该命令不仅移动了分支中HEAD指针的位置,还将工作区和暂存区中数据也回退到了指定的版本. (提示 ...

  5. 『现学现忘』Git后悔药 — 32、revert撤销(一)

    目录 1.Git的三种后悔药 2.revert命令原理 3.revert命令的使用 (1)移除某次提交的修改 (2)revert命令说明 1.Git的三种后悔药 在Git中后悔药有三种:amend.r ...

  6. 『现学现忘』Git后悔药 — 34、git commit --amend 命令

    目录 1.git commit --amend 命令说明 2.使用场景 (1)场景一 (2)场景二 3.git commit --amend 命令原理 这是我们Git中的第三种后悔药. 1.git c ...

  7. 『现学现忘』Git后悔药 — 33、revert撤销(二)

    目录 4.一次移除某几次提交 (1)git revert移除某几次提交的修改 (2)git revert 移除某几次连续的提交的修改 5.revert命令常用参数 6.git revert和git r ...

  8. 『现学现忘』Git基础 — 5、Git的协作模式

    目录 1.分布式工作流程 2.集中式工作流 3.分支工作流 4.GitFlow 工作流(最流行) 5.Forking 工作流(偶尔使用) 6.总结 1.分布式工作流程 与传统的集中式版本控制系统(CV ...

  9. 『现学现忘』Git基础 — 21、git diff命令

    目录 1.git diff 命令说明 2.比较工作区与暂存区中文件的差别 3.比较暂存区与本地库中文件的差别 4.总结git diff命令常见用法 5.总结 1.git diff 命令说明 在comm ...

随机推荐

  1. iOS全埋点解决方案-手势采集

    前言 ​ 随着科技以及业务的发展,手势的应用也越来越普及,因此对于数据采集,我们要考虑如果通过全埋点来实现手势的采集. 一.手势识别器 ​ 苹果为了降低开发者在手势事件处理方面的开发难度,定义了一个抽 ...

  2. Prim 最小生成树 图解

    ​ 什么是生成树 子图:G=<V,E>,G'=<V', E'>,为两个图(V为点集,即图中点的集合,E为边集),如果V'是V的子集且E'是E的子集,则G'是G的子图. 如果V' ...

  3. 浅尝Spring注解开发_Bean生命周期及执行过程

    Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含Bean生命周期.自定义初始化方法.Debug BeanPostProcessor执行过程及在Spring底层中的应 ...

  4. 【代理是什么?】nginx快速入门+反向代理hexo个人博客

    @ 目录 前言 本文说明 请大家务必查看 工作原理 正向代理 反向代理 环境准备 详细版 入门:搭建步骤 配置阿里云epel源: yum安装nginx: 启动nginx: 配置default.conf ...

  5. Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询

    Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...

  6. 10大黑客专用的 Linux 操作系统

    上一篇:为什么不建议把数据库部署在Docker容器内? 今天列出一些最常用.最受欢迎的Linux发行版来学习黑客和渗透测试! 1. Kali Linux Kali Linux是最著名的Linux发行版 ...

  7. 2021夏季学期华清大学EE数算OJ2:难缠的店长

    2021年夏季学期华清大学电子系数算oj2题解 某知名oier锐评蒟蒻的oj1题解: 话不多说,进入oj2题解: 难缠的oj 之 难缠的店长 当时读完我已经因为无良甲方的行为出离愤怒了!但是做题还是要 ...

  8. HMS Core使能AI智慧体验,共建创新应用生态

    5月17日,2022年搜狐科技峰会成功举办,峰会汇聚各界大咖,共同探讨AI 技术的深入应用以及行业数字化的发展趋势.华为终端云服务应用生态BU总裁望岳发表题为<使能AI智慧体验,共建创新应用生态 ...

  9. 文件操作(Java)

    学习内容:文件操作        1.输入流:InputStream类是字节输入流的抽象类,常用的一些方法有: raed()方法:从输入流中读取数据的下一个字节 reset()方法:将输入指针返回到当 ...

  10. Linux版 MySql57安装教程

    这里介绍的是CentOS7.4安装mysql57的教程 创建MySQL文件包 使用mkdir -p 文件夹路径创建以下目录: 文件夹路径 用途 /usr/local/mysql MySQL安装路径 / ...