『现学现忘』Git后悔药 — 31、reset版本回退命令总结
在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中发生的变化,如下图所示:

理解一下发生的事情,我们可以看到上图中,完成了两步操作:
- 把HEAD指针指向了
V3版本(也就是版本库回退了)。 - 把暂存区中的
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中发生的变化,如下图所示:

理解一下发生的事情,我们可以看到上图中,完成了三步操作:
- 把HEAD指针指向了
V3版本(也就是版本库回退了)。 - 把暂存区中的
readme.txt文件也回退到了V3版本。 - 把工作区中
readme.txt文件的修改也复原了。
所以执行完git reset --hard HEAD^命令,是完全回退一个版本。
此时工作区、暂存区、本地版本库中的文件状态都是一致的,都是V3版本。
就等于回滚了一个“编辑文件,添加到暂存区,提交版本库”的整个流程。
(我前面文章中有详细的演示)
4、总结
必须注意:
--hard参数是git reset命令唯一的危险用法,是能够使Git会真正地销毁数据的仅有的几个操作之一。
其他任何形式的git reset操作都可以轻松撤消,但是--hard选项不能,因为它强制覆盖了工作目录中的文件。
在这种特殊情况下,我们的Git数据库中的一个提交内,还留有该文件的V4版本,我们可以通过git reflog来找回它。但是若该文件还未提交,Git仍会覆盖它从而导致无法恢复。
『现学现忘』Git后悔药 — 31、reset版本回退命令总结的更多相关文章
- 『现学现忘』Git后悔药 — 27、版本回退介绍
目录 1.什么版本回退 2.需要了解两个知识点 (1)HEAD是什么 (2)HEAD指针用法 3.git reflog命令介绍 1.什么版本回退 版本回退也可以叫回滚. 若修改过的文件,不仅添加到了暂 ...
- 『现学现忘』Git后悔药 — 28、版本回退git reset --soft命令说明
git reset --soft commit-id命令:回退到指定版本.(soft:柔软的) 该命令仅仅修改分支中的HEAD指针的位置,不会改变工作区与暂存区中的文件的版本. 实现上是只做了一件事情 ...
- 『现学现忘』Git后悔药 — 29、版本回退git reset --mixed命令说明
git reset --mixed commit-id命令:回退到指定版本.(mixed:混合的,即:中等回退.) 该命令不仅修改了分支中HEAD指针的位置,还将暂存区中数据也回退到了指定版本. 但是 ...
- 『现学现忘』Git后悔药 — 30、版本回退git reset --hard命令说明
git reset --hardcommit-id命令:回退到指定版本.(hard:强硬,严格的回退) 该命令不仅移动了分支中HEAD指针的位置,还将工作区和暂存区中数据也回退到了指定的版本. (提示 ...
- 『现学现忘』Git后悔药 — 32、revert撤销(一)
目录 1.Git的三种后悔药 2.revert命令原理 3.revert命令的使用 (1)移除某次提交的修改 (2)revert命令说明 1.Git的三种后悔药 在Git中后悔药有三种:amend.r ...
- 『现学现忘』Git后悔药 — 34、git commit --amend 命令
目录 1.git commit --amend 命令说明 2.使用场景 (1)场景一 (2)场景二 3.git commit --amend 命令原理 这是我们Git中的第三种后悔药. 1.git c ...
- 『现学现忘』Git后悔药 — 33、revert撤销(二)
目录 4.一次移除某几次提交 (1)git revert移除某几次提交的修改 (2)git revert 移除某几次连续的提交的修改 5.revert命令常用参数 6.git revert和git r ...
- 『现学现忘』Git基础 — 5、Git的协作模式
目录 1.分布式工作流程 2.集中式工作流 3.分支工作流 4.GitFlow 工作流(最流行) 5.Forking 工作流(偶尔使用) 6.总结 1.分布式工作流程 与传统的集中式版本控制系统(CV ...
- 『现学现忘』Git基础 — 21、git diff命令
目录 1.git diff 命令说明 2.比较工作区与暂存区中文件的差别 3.比较暂存区与本地库中文件的差别 4.总结git diff命令常见用法 5.总结 1.git diff 命令说明 在comm ...
随机推荐
- SpringMVC的文件上传下载,异常处理,拦截器的小总结
文件的上传和下载 我们通常在访问网页时会使用到文件的上传与下载的功能,那么他是如何实现的呢? 1 下载: ResponseEntity :用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览 ...
- python学习-Day32
目录 今日内容详细 软件开发架构 概念 软件开发架构的分类 C/S架构 B/S架构 两种架构的优缺点 C/S架构: B/S架构: tip 网络编程 概念 互联网 互联网协议 OSI七层协议简介 专业设 ...
- Python 树表查找_千树万树梨花开,忽如一夜春风来(二叉排序树、平衡二叉树)
什么是树表查询? 借助具有特殊性质的树数据结构进行关键字查找. 本文所涉及到的特殊结构性质的树包括: 二叉排序树. 平衡二叉树. 使用上述树结构存储数据时,因其本身对结点之间的关系以及顺序有特殊要求, ...
- FreeRTOS --(17)任务通知浅析
转载自https://blog.csdn.net/zhoutaopower/article/details/107467305 在 FreeRTOS 中,还有一个东西也可以用作任务与任务,中断与任务的 ...
- Java中的JVM和Redis,你了解的透彻么?
招聘在前不久已经渐渐拉下帷幕了,看到最近技术群一个问题,引起了我的思考:"今年面试为什么那么难?" 想必大家都知道程序员要涨薪主要靠跳槽来完成!但是无论是考试,还是求职,这个难度, ...
- 【Hadoop】10、Flume组件
目录 Flume组件安装配置 1.下载和解压 Flume 2.Flume 组件部署 3.使用 Flume 发送和接受信息 Flume组件安装配置 1.下载和解压 Flume # 传Flume安装包 [ ...
- nginx1.1 nginx介绍和反向代理
1.什么是nginx nginx是一个高性能的http和反向代理的web服务器,所占内存小,高并发 nginx默认端口:80端口 命令存放目录:cd /usr/local/nginx/sbin 配置文 ...
- 层层剖析一次 HTTP POST 请求事故
vivo 互联网服务器团队- Wei Ling 本文主要讲述的是如何根据公司网络架构和业务特点,锁定正常请求被误判为跨域的原因并解决. 一.问题描述 某一个业务后台在表单提交的时候,报跨域错误,具体如 ...
- 149_1秒获取Power BI Pro帐号
一.背景 当你来到这篇文章的时候,我想你已经在网上搜索了一圈了.网上有一大把教你如何注册Power BI帐号的方法,我们这里就不在赘述了.因为各种因素的限制确实比较麻烦.我们直接提供Power BI ...
- 使用 oh-my-posh 美化 windows terminal,让其接近oh-my-zsh
本文旨在快速让你进行美化,少踩一些坑,原文出自我的博客:prettier-windows-terminal-with-oh-my-posh 为了同 iterm2 下的 oh-my-zsh 保持基本一致 ...