git reset --mixed commit-id命令:回退到指定版本。(mixed:混合的,即:中等回退。)

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

但是工作区中的版本仍是回退前的版本。

--mixed参数是git reset命令的默认选项。

示例开始:

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

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

# 1.使用git log查看历史版本记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline
bcd2726 (HEAD -> master) 第3次提交,新增内容:readme.txt file v3
b2de20c 第2次提交,新增内容:readme.txt file v2
40212c3 第1次提交,创建readme.txt文件 # 2.使用git reflog查看历史版本记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reflog
bcd2726 (HEAD -> master) HEAD@{0}: commit: 第3次提交,新增内容:readme.txt file v3
b2de20c HEAD@{1}: commit: 第2次提交,新增内容:readme.txt file v2
40212c3 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 68701fc] 第4次提交,新增内容:readme.txt file v4
1 file changed, 1 insertion(+) # 4.现在查看此时本地版本库日志
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline
68701fc (HEAD -> master) 第4次提交,新增内容:readme.txt file v4
bcd2726 第3次提交,新增内容:readme.txt file v3
b2de20c 第2次提交,新增内容:readme.txt file v2
40212c3 第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 --mixed HEAD^命令,退回到前一个版本。

# 回退一个提交版本
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reset --mixed HEAD^
Unstaged changes after reset:
M readme.txt

说明:

  • Unstaged changes after reset:意思是回退后,有为被追踪的文件。
  • M readme.txt:表示readme.txt文件修改后,未被追踪,也就是修改后未添加到暂存区的状态。

这里也就说明了,暂存区中readme.txt文件被回退了。我们还是继续按步骤往下演示。

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

# 1.比对工作区与暂存区中文件的差异
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git diff readme.txt
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory
diff --git a/readme.txt b/readme.txt
index 1e6534a..47b238c 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,3 +1,4 @@
readme.txt file v1
readme.txt file v2
readme.txt file v3
+readme.txt file v4 # 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
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory
diff --git a/readme.txt b/readme.txt
index 1e6534a..47b238c 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,3 +1,4 @@
readme.txt file v1
readme.txt file v2
readme.txt file v3
+readme.txt file v4

回退后,我们再次对比了工作区、暂存区与本地库中版本中文件的差异:

  • 发现工作区与暂存区内容出现了差异。
  • 暂存区与本地库中的版本没有差异。
  • 工作区与本地库中的版本出现了差异。

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

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

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

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

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

7、恢复到回退前版本。

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

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

而工作区内容不回退。

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

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: readme.txt no changes added to commit (use "git add" and/or "git commit -a")

我们可以看到readme.txt文件是修改未暂存状态。

所以若要恢复到回退之前的版本,也是两种方式:

  1. 把工作区的readme.txt文件添加到暂存区,在commit提交到本地版本库中。
  2. 使用git reset --mixed 68701fc命令,退回到第四次提交版本。

提示(重要):就本例而言,虽然可以通过先add到暂存区,再commit提交到本地版本库的方式,就可以恢复回退前的版本。但若回退的版本是很多版本之前的版本,最好不要使用该方式,而是使用版本跳转命令的方式(也就是第二种方式)。

第一种常规操作,这里就不演示了。下面演示一下第二种方式:

# 1.查看可回退的历史版本
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reflog
bcd2726 HEAD@{1}: reset: moving to HEAD^
68701fc (HEAD -> master) HEAD@{2}: commit: 第4次提交,新增内容:readme.txt file v4
bcd2726 HEAD@{3}: commit: 第3次提交,新增内容:readme.txt file v3
b2de20c HEAD@{4}: commit: 第2次提交,新增内容:readme.txt file v2
40212c3 HEAD@{5}: commit (initial): 第1次提交,创建readme.txt文件 # 2.回退到第四次提交
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reset --mixed 68701fc # 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
68701fc (HEAD -> master) 第4次提交,新增内容:readme.txt file v4
bcd2726 第3次提交,新增内容:readme.txt file v3
b2de20c 第2次提交,新增内容:readme.txt file v2
40212c3 第1次提交,创建readme.txt文件 # 5.查看可回退的历史版本
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reflog
68701fc (HEAD -> master) HEAD@{0}: reset: moving to 68701fc
bcd2726 HEAD@{1}: reset: moving to HEAD^
68701fc (HEAD -> master) HEAD@{2}: commit: 第4次提交,新增内容:readme.txt file v4
bcd2726 HEAD@{3}: commit: 第3次提交,新增内容:readme.txt file v3
b2de20c HEAD@{4}: commit: 第2次提交,新增内容:readme.txt file v2
40212c3 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后悔药 — 29、版本回退git reset --mixed命令说明的更多相关文章

  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后悔药 — 30、版本回退git reset --hard命令说明

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

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

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

随机推荐

  1. 最新MATLAB R2021b超详细安装教程(附完整安装文件)

    摘要:本文详细介绍Matlab R2021b的安装步骤,为方便安装这里提供了完整安装文件的百度网盘下载链接供大家使用.从文件下载到证书安装本文都给出了每个步骤的截图,按照图示进行即可轻松完成安装使用. ...

  2. pgpool-II 4.3 中文手册-前言

    什么是 Pgpool-II? Pgpool II 管理一个 PostgreSQL 服务器池,以实现单个 PostgreSQL 安装无法实现的一些功能.这些功能包括: 高可用 Pgpool-II 通过使 ...

  3. IDEA编译项目后,target目录下的jsp文件不更新

    tomcat目录说明 先来看一下tomcat的目录: |-bin |-conf |-lib |-logs |-temp |-webapps |-work tomcat 的核心是servlet容器,叫 ...

  4. 《Mybatis 手撸专栏》第6章:数据源池化技术实现

    作者:小傅哥 博客:https://bugstack.cn - 手写Mybatis系列文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 码农,只会做不会说? 你有发现吗,其实很大一部分码农 ...

  5. NLP教程(4) - 句法分析与依存解析

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  6. RabbitMQ 3.9( 基础 )

    1.认识MQ 1.1.什么是MQ? MQ全称:message queue 即 消息队列 这个队列遵循的原则:FIFO 即 先进先出 队列里面存的就是message 1.2.为什么要用MQ? 1.2.1 ...

  7. 【远古黑历史】List链表及其功能

    前言 我知道有学校是禁用STL的, 但STL是真的香,加个蛋,嗯,好吃 所以,本人希望有更多OIer能使用STL,减少工作量! 初见STL 首先,什么是STL? STL,全称 Standard Tem ...

  8. SQL注入的几种类型

    SQL注入就是: 将构造SQL语句来插入到web提交的数据之中,让其返回数据时运行自己构造的恶意SQL语句. SQL注入构造恶意SQL语句的方法有: 构造堆叠,构造闭合,构造报错,构造时间差,等等 S ...

  9. CSAPP 之 AttackLab 详解

    前言 本篇博客将会介绍 CSAPP 之 AttackLab 的攻击过程,利用缓冲区溢出错误进行代码注入攻击和 ROP 攻击.实验提供了以下几个文件,其中 ctarget 可执行文件用来进行代码注入攻击 ...

  10. 关于『HTML』:第三弹

    关于『HTML』:第三弹 建议缩放90%食用 盼望着, 盼望着, 第三弹来了, HTML基础系列完结了!! 一切都像刚睡醒的样子(包括我), 欣欣然张开了眼(我没有) 敬请期待Markdown语法系列 ...