git reset --hardcommit-id命令:回退到指定版本。(hard:强硬,严格的回退)

该命令不仅移动了分支中HEAD指针的位置,还将工作区和暂存区中数据也回退到了指定的版本。

(提示:该命令慎用。)

示例开始:

首先在版本库中的readme.txt文件中添加一行内容,并提交该内容。我们的目的就是要再回退到该版本。

1、查看本地版本库日志。

# 1.使用git log查看历史版本记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline
529ad74 (HEAD -> master) 第3次提交,新增内容:readme.txt file v3
1b23cae 第2次提交,新增内容:readme.txt file v2
2612adf 第1次提交,创建readme.txt文件 # 2.使用git reflog查看历史版本记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reflog
529ad74 (HEAD -> master) HEAD@{0}: commit: 第3次提交,新增内容:readme.txt file v3
1b23cae HEAD@{1}: commit: 第2次提交,新增内容:readme.txt file v2
2612adf HEAD@{2}: commit (initial): 第1次提交,创建readme.txt文件 # 3.查看readme.txt文件的内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cat readme.txt
readme.txt file v1
readme.txt file v2
readme.txt file v3

2、向readme.txt文件中新增一行数据,并提交到本地版本库。

# 1.新增数据
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "readme.txt file v4" >> readme.txt # 2.查看readme.txt文件内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cat readme.txt
readme.txt file v1
readme.txt file v2
readme.txt file v3
readme.txt file v4 # 3.提交到本地版本库
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git commit -a -m '第4次提交,新增内容:readme.txt file v4'
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory
[master e72b30f] 第4次提交,新增内容:readme.txt file v4
1 file changed, 1 insertion(+) # 4.现在查看此时本地版本库日志
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline
e72b30f (HEAD -> master) 第4次提交,新增内容:readme.txt file v4
529ad74 第3次提交,新增内容:readme.txt file v3
1b23cae 第2次提交,新增内容:readme.txt file v2
2612adf 第1次提交,创建readme.txt文件

3、现在比对工作区与暂存区、暂存区与本地版本库的差异。

# 1.比对工作区与暂存区中文件的差异
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git diff readme.txt # 2.比对暂存区与本地版本库中文件的差异
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git diff --cached readme.txt

我们可以看到此时,工作区、暂存区与本地版本库中的readme.txt文件状态无差异。

4、开始回退操作,退回到V3版本。

使用git reset --hard HEAD^命令,退回到前一个版本。

# 回退一个提交版本
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reset --hard HEAD^
HEAD is now at 529ad74 第3次提交,新增内容:readme.txt file v3

说明:

HEAD is now at 529ad74 第3次提交,新增内容:readme.txt file v3

意思是:HEAD现在位于commit-id529ad74的提交,提交说明为:第3次提交,新增内容:readme.txt file v3

5、回退后,对比工作区、暂存区与本地库中版本中文件的差异。

# 1.比对工作区与暂存区中文件的差异
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git diff readme.txt # 2.比对暂存区与本地版本库中文件的差异
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git diff --cached readme.txt # 3.比对工作区与本地版本库中文件的差异
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git diff HEAD readme.txt

回退后,我们再次对比了工作区、暂存区与本地库中版本中文件的差异:没有内容差异,完全一样。

说明:工作区、暂存区和本地库中的内容,都回退到了之前的版本。(重要)

6、查看本地版本库的提交日志信息。

# 1.使用git log查看历史版本记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline
529ad74 (HEAD -> master) 第3次提交,新增内容:readme.txt file v3
1b23cae 第2次提交,新增内容:readme.txt file v2
2612adf 第1次提交,创建readme.txt文件 # 2.使用git reflog查看历史版本记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reflog
529ad74 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
e72b30f HEAD@{1}: commit: 第4次提交,新增内容:readme.txt file v4
529ad74 (HEAD -> master) HEAD@{2}: commit: 第3次提交,新增内容:readme.txt file v3
1b23cae HEAD@{3}: commit: 第2次提交,新增内容:readme.txt file v2
2612adf HEAD@{4}: commit (initial): 第1次提交,创建readme.txt文件

从上我们可以看到:(重点)

  • 使用git log命令查看历史版本记录,发现已经看不到第4次提交了。
  • 使用git reflog命令查看历史版本记录,第四次提交这个版本仍然存在的。

7、恢复到回退前版本。

上面说了,使用git reset --hard命令回退,做了三个操作:

  1. 移动HEAD指针(版本库的回退)。
  2. 暂存区的内容回退到HEAD指针指向的版本。
  3. 工作区的内容也回退到HEAD指针指向的版本。

我们现在来查看一下工作目录中的文件状态。

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean

可以看到工作目录中是非常干净的。

所以若要恢复到回退之前的版本,只能使用git reset --hard命令回退。

# 1.查看可回退的历史版本
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reflog
529ad74 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
e72b30f HEAD@{1}: commit: 第4次提交,新增内容:readme.txt file v4
529ad74 (HEAD -> master) HEAD@{2}: commit: 第3次提交,新增内容:readme.txt file v3
1b23cae HEAD@{3}: commit: 第2次提交,新增内容:readme.txt file v2
2612adf HEAD@{4}: commit (initial): 第1次提交,创建readme.txt文件 # 2.回退到第四次提交
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reset --hard e72b30f
HEAD is now at e72b30f 第4次提交,新增内容:readme.txt file v4 # 3.查看工作目录中文件状态
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean # 4.查看版本历史
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline
e72b30f (HEAD -> master) 第4次提交,新增内容:readme.txt file v4
529ad74 第3次提交,新增内容:readme.txt file v3
1b23cae 第2次提交,新增内容:readme.txt file v2
2612adf 第1次提交,创建readme.txt文件 # 5.查看可回退的历史版本
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reflog
e72b30f (HEAD -> master) HEAD@{0}: reset: moving to e72b30f
529ad74 HEAD@{1}: reset: moving to HEAD^
e72b30f (HEAD -> master) HEAD@{2}: commit: 第4次提交,新增内容:readme.txt file v4
529ad74 HEAD@{3}: commit: 第3次提交,新增内容:readme.txt file v3
1b23cae HEAD@{4}: commit: 第2次提交,新增内容:readme.txt file v2
2612adf HEAD@{5}: commit (initial): 第1次提交,创建readme.txt文件 # 6.查看readme.txt内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cat readme.txt
readme.txt file v1
readme.txt file v2
readme.txt file v3
readme.txt file v4

我们查看到,readme.txt文件的内容已经完全恢复。

『现学现忘』Git后悔药 — 30、版本回退git reset --hard命令说明的更多相关文章

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

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

  2. [原]git的使用(一)---建立本地仓库、add和commit、status和git diff、版本回退使用git reset

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

  3. Git分支和版本回退

    一.分支 1.分支简单介绍 简单使用: 可以将git branch new_branch和git checkout new_branch两个命令合并成一个命令: git checkout -b new ...

  4. 解决git提交敏感信息(回退git版本库到某一个commit)

    解决git提交敏感信息(回退git版本库到某一个commit) Fri 07 June 2013 git是一个很好的版本库, 现在很多人用它, 并在github上创建项目, 相信大家都有过将敏感信息提 ...

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

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

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

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

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

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

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

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

  9. 『现学现忘』Git对象 — 16、Tree对象详解

    目录 1.Tree对象介绍 2.Tree对象说明 (1)初始化一个新的本地版本库 (2)创建一个树对象(重点) (3)创建第二个文件(重点) (4)将第一个树对象加入暂存区,使其成为新的树对 3.总结 ...

随机推荐

  1. Fauce:Fast and Accurate Deep Ensembles with Uncertainty for Cardinality Estimation 论文解读(VLDB 2021)

    Fauce:Fast and Accurate Deep Ensembles with Uncertainty for Cardinality Estimation 论文解读(VLDB 2021) 本 ...

  2. RAID5加热备盘

    RAID 5加热备盘 RAID 10磁盘阵列中最多允许50%的硬盘设备发生故障,但是存在这样一种极端情况,即同一RAID 1磁盘阵列中的硬盘设备若全部损坏,也会导致数据丢失.换句话说,在RAID 10 ...

  3. VMware16搭建Ubuntu22.04,更新为国内下载源,安装open-vm-tools,用SecureCRT远程连接

    前期准备 1.VMware16(转载:下载安装流程:(https://www.bilibili.com/read/cv9694457)) 2.Ubuntu22.04----iso镜像文件(下载地址:( ...

  4. C#/VB.NET 在Excel单元格中应用多种字体格式

    在Excel中,可对单元格中的字符串设置多种不同样式,通常只需要获取到单元格直接设置样式即可,该方法设置的样式会应用于该单元格中的所有字符.如果需要对单元格中某些字符设置样式,则可以参考本文中的方法. ...

  5. 评价管理后台PC端

    1.css动画效果    --2020.12.26 2.remove() --2020.12.28 3.执行顺序 --2020.12.30 4.联动 --2021.01.06 5.奥利给~ --202 ...

  6. jQuery前端第三方框架

    计时器 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  7. 如何使用 Javascript 将图标字体渲染为图片

    前言 在软件开发中肯定要用到图标,比如下图的 Groove 音乐中就用到了许多图标.一种获取这些图标的方法是把 Groove 音乐截个图,然后熟练地开启 Photoshop,开始抠图.这种方式很逊,效 ...

  8. OpenHarmony3.1 Release版本关键特性解析——Enhanced SWAP内存管理

    樊成阳 华为技术有限公司内核专家 陈杰 华为技术有限公司内核专家 OpenAtom OpenHarmony(以下简称"OpenHarmony")是面向全场景泛终端设备的操作系统,终 ...

  9. CSAPP 之 CacheLab 详解

    前言 本篇博客将会介绍 CSAPP 之 CacheLab 的解题过程,分为 Part A 和 Part B 两个部分,其中 Part A 要求使用代码模拟一个高速缓存存储器,Part B 要求优化矩阵 ...

  10. ElasticSearch基础学习(SpringBoot集成ES)

    一.概述 什么是ElasticSearch? ElasticSearch,简称为ES, ES是一个开源的高扩展的分布式全文搜索引擎. 它可以近乎实时的存储.检索数据:本身扩展性很好,可以扩展到上百台服 ...