『现学现忘』Git后悔药 — 29、版本回退git reset --mixed命令说明
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命令回退,做了两个操作:
- 移动HEAD指针(版本库的回退)。
- 暂存区的内容也回退到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文件是修改未暂存状态。
所以若要恢复到回退之前的版本,也是两种方式:
- 把工作区的
readme.txt文件添加到暂存区,在commit提交到本地版本库中。 - 使用
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命令说明的更多相关文章
- 『现学现忘』Git后悔药 — 31、reset版本回退命令总结
目录 1.--soft回退说明 2.--mixed回退说明 3.--hard回退说明 4.总结 在Git中进行版本回退需要使用git reset命令. 以前面文章中的示例为例,当我准备在V4版本,回退 ...
- [原]git的使用(一)---建立本地仓库、add和commit、status和git diff、版本回退使用git reset
在window下已经安装了git的环境 1.建立本地仓库 mkdir test #建立test目录 cd test #进入目录 git init # ...
- Git分支和版本回退
一.分支 1.分支简单介绍 简单使用: 可以将git branch new_branch和git checkout new_branch两个命令合并成一个命令: git checkout -b new ...
- 解决git提交敏感信息(回退git版本库到某一个commit)
解决git提交敏感信息(回退git版本库到某一个commit) Fri 07 June 2013 git是一个很好的版本库, 现在很多人用它, 并在github上创建项目, 相信大家都有过将敏感信息提 ...
- 『现学现忘』Git后悔药 — 34、git commit --amend 命令
目录 1.git commit --amend 命令说明 2.使用场景 (1)场景一 (2)场景二 3.git commit --amend 命令原理 这是我们Git中的第三种后悔药. 1.git c ...
- 『现学现忘』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后悔药 — 30、版本回退git reset --hard命令说明
git reset --hardcommit-id命令:回退到指定版本.(hard:强硬,严格的回退) 该命令不仅移动了分支中HEAD指针的位置,还将工作区和暂存区中数据也回退到了指定的版本. (提示 ...
- 『现学现忘』Git对象 — 16、Tree对象详解
目录 1.Tree对象介绍 2.Tree对象说明 (1)初始化一个新的本地版本库 (2)创建一个树对象(重点) (3)创建第二个文件(重点) (4)将第一个树对象加入暂存区,使其成为新的树对 3.总结 ...
随机推荐
- 【MQ】java 从零开始实现消息队列 mq-02-如何实现生产者调用消费者?
前景回顾 上一节我们学习了如何实现基于 netty 客服端和服务端的启动. [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]java 从零开始实现消息队列 mq-02-如何实现生产者调用 ...
- jmeter元件分析
jmeter元件分析 一.脚本通用性 1.性能测试脚本改动一下,加入断言等元件,就可以作为接口测试脚本来使用 2.但是接口测试的脚本不可以作为性能测试脚本来使用 3.原因:因为性能测试考虑更多的性能, ...
- Linux-流程控制语法-函数-属组
1.流程控制 1.1 条件选择 1.1.1选择执行if语句 格式: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ] ... ...
- 不使用比较和条件判断实现min函数的一种方法
不使用比较和条件判断实现min函数,参数为两个32位无符号int. 面试的时候遇到的题目,感觉很有意思. 搜了一下多数现有的解法都是仅有两种限制之一,即要么仅要求不能使用比较,要么仅要求不能使用条件判 ...
- Python技法:实用运维脚本编写(进程/文件/目录操作)
Python在很大程度上可以对shell脚本进行替代.笔者一般单行命令用shell,复杂点的多行操作就直接用Python了.这篇文章就归纳一下Python的一些实用脚本操作. 1. 执行外部程序或命令 ...
- 1903021121—刘明伟—Java第六周作业—java类
项目 内容 课程班级博客链接 19信计班(本) 作业要求链接 第6周作业 扩展阅读 java面向对象的概念和定义 作业要求 每道题要有题目,代码,截图(只截运行结果). 题目1: 一个Phone ...
- unity---3D数学基础
点乘 A·B 判断敌人在前方还是后方 调试画线 画线段 前两个参数 分别是 起点 终点 画射线 前两个参数 分别是 起点 方向 Debug.DrawLine(this.transform.positi ...
- Flask_WTF实现表单
Flask_WTF实现表单可分为六个步骤: ①导入FlaskForm扩展包(from flask_wtf import FlaskForm) ②导入StringField,PasswordField, ...
- python之三元表达式与生成式与匿名与内置函数(部分)
目录 三元表达式 各种生成式 列表生成式(可同样作用于集合) 字典生成式 匿名函数 重要内置函数 map() zip() filter() reduce() 常见内置函数(部分) 三元表达式 三元表达 ...
- 目标检测复习之YOLO系列
目标检测之YOLO系列 YOLOV1: blogs1: YOLOv1算法理解 blogs2: <机器爱学习>YOLO v1深入理解 网络结构 激活函数(leaky rectified li ...