1、什么版本回退

版本回退也可以叫回滚

若修改过的文件,不仅添加到了暂存区,还提交到了本地版本库,还能撤销吗?

已经无法撤销修改了,但是可以回退到修改前的版本。

版本回退也是撤销操作的一种,但我更愿意和前两种撤销操作分开理解。

引用廖雪峰比喻:

你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。

Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

2、需要了解两个知识点

能够了解是什么即可。

(1)HEAD是什么

HEAD也可以称为HEAD指针。

Git仓库初始化之后,会默认创建一个master分支,即主分支。这是Git对版本进行管理的时间线,即Git的每次提交,都会自动把它们串成一条时间线,这条时间线就是一个分支。

如果没有新建分支,那么就只有一条时间线,即只有一个分支,master分支(主分支)。在这条master时间线上有很多版本的时间节点(提交的commit),而HEAD指针则指向的是当前分支上,刚刚提交的版本时间节点。

如果上面看不太懂的话,就记住:HEAD指针指向分支,分支指向具体commit。所以HEAD指针代表的就是当前工作分支上最新一次的提交。

具体原理以后会总结,这里不详细展开,如下图所示:

(2)HEAD指针用法

上面说了,HEAD指针代表的就是当前工作分支上最新一次的提交。换句话说HEAD这个词就等同于当前工作分支上最新一次提交的别名。

HEAD指针还可以表示相对位置,有几种表示方法:

  • 单写HEAD,表示当前工作分支的最新提交版本。
  • 可以通过^表示前一个版本,例如HEAD^,如要表示前两个版本,则需要加两个^,示例:HEAD^^,以此类推。
  • 但是要选择之前版本跨度较多的时候,^的数量就不是很好数了(书写可读性差),此时可以使用~加数字表示当前版本之前的第几个版本。例如:HEAD~100表示为最新版本的往前第100个版本。
  • 当时我们也可以使用HEAD@{0}的方式进行表示,HEAD@{0}等于HEADHEAD@{1}等于HEAD^,也就是前一个版本。值的数字越小,表示版本越新,数字越大表示版本越旧。

HEAD指针的作用示意图:

3、git reflog命令介绍

git reflog命令是用来恢复本地错误操作很重要的一个命令,他和git log命令一样都可以查看本地版本库的历史提交信息。

但是不同的是,git reflog命令能够查看可引用历史提交版本。

可引用历史提交版本,什么意思?

  • 使用git log命令只可以查看到HEAD指针及其之前的版本信息,如果版本发生过回退操作,则可能会出现,HEAD指针之后仍存在历史提交版本的情况,而这些提交版本信息通过git log命令是看不到的。
  • 我们可以通过使用git reflog命令,就可查看到所有历史版本信息。由于查看所有历史版本信息的目的,大多是为了进行版本回退或恢复操作所使用,从中找到所需的commit索引,所以该命令被命名为reflog,即:引用日志。

git log命令与git reflog命令作用范围示意图:

『现学现忘』Git后悔药 — 27、版本回退介绍的更多相关文章

  1. 『现学现忘』Git后悔药 — 31、reset版本回退命令总结

    目录 1.--soft回退说明 2.--mixed回退说明 3.--hard回退说明 4.总结 在Git中进行版本回退需要使用git reset命令. 以前面文章中的示例为例,当我准备在V4版本,回退 ...

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

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

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

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

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

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

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

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

  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的使用(一)---建立本地仓库、add和commit、status和git diff、版本回退使用git reset

    在window下已经安装了git的环境 1.建立本地仓库 mkdir   test     #建立test目录 cd   test        #进入目录 git  init           # ...

  9. Git使用:版本回退

    在Git中,我们可以用 git log命令查看我们修改的历史记录 C:\Users\Administrator\Documents\GitHub\learngit [master]> git l ...

随机推荐

  1. kubeadm 搭建 K8s

    kubeadm 搭建 K8s 本篇主要记录一下 使用 kubeadm 搭建 k8s 详细过程 ,环境使用 VirtualBox 构建的3台虚拟机 1.环境准备 操作系统:Centos7 (CentOS ...

  2. 『现学现忘』Git基础 — 12、Git用户签名(补充)

    目录 1.修改用户签名 2.取消用户签名 3.用户签名的优先级 4.总结本文用到的Git命令 1.修改用户签名 其实很简单,就是重新执行git config命令,换个用户名和邮箱地址就可以了,新配置的 ...

  3. XCTF练习题---MISC---小小的PDF

    XCTF练习题---MISC---小小的PDF flag:SYC{so_so_so_easy} 解题步骤: 1.观察题目,下载附件 2.下载完发现是一个PDF文件,经过转Word,查看属性,十六进制查 ...

  4. 半导体行业如何保持高效远程办公?因果集群(Causal Clustering)了解一下!

    什么是因果集群?因果集群是下一代多站点复制技术.它支持数据中心的分布式系统集群模型.借助于因果集群技术,可以让远程工作团队成员体验到更卓越的性能和更健壮的复制功能,确保您的团队始终以高效状态工作. 因 ...

  5. FreeRTOS --(5)内存管理 heap4

    FreeRTOS 中的 heap 4 内存管理,可以算是 heap 2 的增强版本,在 <FreeRTOS --(3)内存管理 heap2>中,我们可以看到,每次内存分配后都会产生一个内存 ...

  6. 服务器BIOS和BMC等知识详解

    一个执着于技术的公众号 引言:以BIOS为核心的固件产业,是信创产业链的重要组成部分,可被誉为信创产业的"山海关".在计算机体系中,BIOS 有着比操作系统更为底层和基础性的作用, ...

  7. unity---脚本创建按钮

    脚本创建按钮 新建文件夹 Resources 方便引用图片 在文件Resources中新建Images,并且下载一个图片 没有图片,按钮内容无法显示 图片需要处理一下 Textrue Type 改为 ...

  8. 个人冲刺(二)——体温上报app(一阶段)

    任务:完成了WenData类的编写,同时完成了SecondActivity.java SecondActivity.java package com.example.helloworld; impor ...

  9. K8S Calico网络插件

    0.前言 参考文档:https://github.com/containernetworking/cni Pod网络插件,为了实现Pod网络而需要的插件.组件.由于Kubernetes通过开放的CNI ...

  10. 满满干货!手把手教你实现基于eTS的分布式计算器

    最近收到很多小伙伴反馈,想基于扩展的TS语言(eTS)进行HarmonyOS应用开发,但是不知道代码该从何处写起,从0到1的过程让新手们抓狂. 本期我们将带来"分布式计算器"的开发 ...