『现学现忘』Git后悔药 — 28、版本回退git reset --soft命令说明
git reset --soft commit-id命令:回退到指定版本。(soft:柔软的)
该命令仅仅修改分支中的HEAD指针的位置,不会改变工作区与暂存区中的文件的版本。
实现上是只做了一件事情,就是移动HEAD指针的指向,指向了指定的提交版本。
示例开始:
首先在版本库中的readme.txt文件中添加一行内容,并提交该内容。我们的目的就是要再回退到该版本。
1、查看本地版本库日志。
# 1.使用git log查看历史版本记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline
f4da0ae (HEAD -> master) 第3次提交,新增内容:readme.txt file v3
05f5ff9 第2次提交,新增内容:readme.txt file v2
75b4466 第1次提交,创建readme.txt文件
# 2.使用git reflog查看历史版本记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reflog
f4da0ae (HEAD -> master) HEAD@{0}: commit: 第3次提交,新增内容:readme.txt file v3
05f5ff9 HEAD@{1}: commit: 第2次提交,新增内容:readme.txt file v2
75b4466 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 2c4401f] 第4次提交,新增内容:readme.txt file v4
1 file changed, 1 insertion(+)
# 4.现在查看此时本地版本库日志
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline
2c4401f (HEAD -> master) 第4次提交,新增内容:readme.txt file v4
f4da0ae 第3次提交,新增内容:readme.txt file v3
05f5ff9 第2次提交,新增内容:readme.txt file v2
75b4466 第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 --soft HEAD^命令,退回到前一个版本。
# 1.回退一个提交版本
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reset --soft HEAD^
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
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
# 3.比对工作区与本地版本库中文件的差异
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git diff HEAD readme.txt
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
f4da0ae (HEAD -> master) 第3次提交,新增内容:readme.txt file v3
05f5ff9 第2次提交,新增内容:readme.txt file v2
75b4466 第1次提交,创建readme.txt文件
# 2.使用git reflog查看历史版本记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reflog
f4da0ae (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
2c4401f HEAD@{1}: commit: 第4次提交,新增内容:readme.txt file v4
f4da0ae (HEAD -> master) HEAD@{2}: commit: 第3次提交,新增内容:readme.txt file v3
05f5ff9 HEAD@{3}: commit: 第2次提交,新增内容:readme.txt file v2
75b4466 HEAD@{4}: commit (initial): 第1次提交,创建readme.txt文件
从上我们可以看到:(重点)
- 使用
git log命令查看历史版本记录,发现已经看不到第4次提交了。 - 使用
git reflog命令查看历史版本记录,第四次提交这个版本仍然存在的。
7、恢复到回退前版本。
因为前面说了,git reset --soft命令回退,只是移动HEAD指针,也就是本地版本库进行退回,而工作区和暂存区的内容都不回退。
所以若要恢复到回退之前的版本,可以直接将暂存区中的数据commit提交到本地版本库即可。
# 1.查看工作目录中文件的状态
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: readme.txt
# 我们可以看到readme.txt文件是修改已暂存状态,提交即可。
# 即当前的Git状态为暂存区中的版本尚未提交时的状态。
# 2.提交操作
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git commit -m '第5次提交,append v4 again!'
[master 4399da4] 第5次提交,append v4 again!
1 file changed, 1 insertion(+)
# 3.查看工作目录中文件状态
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean
# 4.使用git log查看历史版本记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline
4399da4 (HEAD -> master) 第5次提交,append v4 again!
f4da0ae 第3次提交,新增内容:readme.txt file v3
05f5ff9 第2次提交,新增内容:readme.txt file v2
75b4466 第1次提交,创建readme.txt文件
# 已经看不到第四次提交了。所以git log命令是看不到全部历史版本的。
# 5.使用git reflog查看历史版本记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reflog
4399da4 (HEAD -> master) HEAD@{0}: commit: 第5次提交,append v4 again!
f4da0ae HEAD@{1}: reset: moving to HEAD^
2c4401f HEAD@{2}: commit: 第4次提交,新增内容:readme.txt file v4
f4da0ae HEAD@{3}: commit: 第3次提交,新增内容:readme.txt file v3
05f5ff9 HEAD@{4}: commit: 第2次提交,新增内容:readme.txt file v2
75b4466 HEAD@{5}: commit (initial): 第1次提交,创建readme.txt文件
# 使用git reflog命令,可以看到全部的历史版本记录。
提示:我们可以通过git reset --soft命令,回退到第4次提交。
执行命令:$ git reset --soft 2c4401f
也会生成一个新的commit提交,日志信息如下:
2c4401f (HEAD -> master) HEAD@{0}: reset: moving to 2c4401f
看到最前的的2c4401f和第四次提交的commit一致,说明已经退回到第四次提交了。
『现学现忘』Git后悔药 — 28、版本回退git reset --soft命令说明的更多相关文章
- 『现学现忘』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后悔药 — 29、版本回退git reset --mixed命令说明
git reset --mixed commit-id命令:回退到指定版本.(mixed:混合的,即:中等回退.) 该命令不仅修改了分支中HEAD指针的位置,还将暂存区中数据也回退到了指定版本. 但是 ...
- 『现学现忘』Git后悔药 — 30、版本回退git reset --hard命令说明
git reset --hardcommit-id命令:回退到指定版本.(hard:强硬,严格的回退) 该命令不仅移动了分支中HEAD指针的位置,还将工作区和暂存区中数据也回退到了指定的版本. (提示 ...
- 『现学现忘』Git对象 — 16、Tree对象详解
目录 1.Tree对象介绍 2.Tree对象说明 (1)初始化一个新的本地版本库 (2)创建一个树对象(重点) (3)创建第二个文件(重点) (4)将第一个树对象加入暂存区,使其成为新的树对 3.总结 ...
随机推荐
- C#开发PACS医学影像三维重建(十三):基于人体CT值从皮肤渐变到骨骼的梯度透明思路
当我们将CT切片重建为三维体之后,通常会消除一些不必要的外部组织来观察内部病灶, 一般思路是根据人体常见CT值范围来使得部分组织透明来达到效果, 但这是非黑即白的,即,要么显示皮肤,要么显示神经,要么 ...
- 《Java编程思想》读书笔记(二)
三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第一章到第十章的内容,这一次记录的是第 ...
- java、selenium、图片滑块验证,底部附本地可测试代码
准备 本地Chrome版本对应WebDriver驱动:http://chromedriver.storage.googleapis.com/index.html maven包 <!-- sele ...
- 使用client-go实现自定义控制器
使用client-go实现自定义控制器 介绍 我们已经知道,Service对集群之外暴露服务的主要方式有两种:NodePort和LoadBalancer,但是这两种方式,都有一定的缺点: NodePo ...
- Vue组件之间通信
vue组件传值有以下几种情况: 父组件向子组件传值.子组件向父组件传值.兄弟组件之间传值等 一.父组件向子组件传值: 传值方式: props <father> // 动态传递值 <s ...
- Unity-Adressable打包热更
Addressable是Unity推出的打ab包方案,自动依赖: 不需要手动写AB打包方案,不需要关心依赖; 提供本地远程服务异步加载: 打包粒度可调节: 1.Group Addressable打包需 ...
- 一文带你搞懂 Kafka 的系统架构(深度好文,值得收藏)
Kafka 简介 Kafka 是一种高吞吐.分布式.基于发布和订阅模型的消息系统,最初是由 LinkedIn 公司采用 Scala 和 java 开发的开源流处理软件平台,目前是 Apache 的开源 ...
- 好客租房49-组件的props(特点)
特点 1可以给组件传递任意类型的数据 2props是只读的对象 只能读取属性的值 无法修改对象 3注意:使用类组件时 如果写了构造函数 应该将props传递给super() 否则 无法在构造函数 中获 ...
- 详解SQL操作的窗口函数
摘要:窗口函数是聚集函数的延伸,是更高级的SQL语言操作,主要用于AP场景下对数据进行一些分析.汇总.排序的功能. 本文分享自华为云社区<GaussDB(DWS) SQL进阶之SQL操作之窗口函 ...
- pandas:多层索引
多层索引是指在行或者列轴上有两个及以上级别的索引,一般表示一个数据的几个分项. 1.创建多层索引 1.1通过分组产生多层索引 1.2由序列创建 1.3由元组创建 1.4可迭代对象的笛卡尔积 1.5将D ...