『现学现忘』Git后悔药 — 30、版本回退git reset --hard命令说明
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-id为529ad74的提交,提交说明为:第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命令回退,做了三个操作:
- 移动HEAD指针(版本库的回退)。
- 暂存区的内容回退到HEAD指针指向的版本。
- 工作区的内容也回退到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命令说明的更多相关文章
- 『现学现忘』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后悔药 — 29、版本回退git reset --mixed命令说明
git reset --mixed commit-id命令:回退到指定版本.(mixed:混合的,即:中等回退.) 该命令不仅修改了分支中HEAD指针的位置,还将暂存区中数据也回退到了指定版本. 但是 ...
- 『现学现忘』Git对象 — 16、Tree对象详解
目录 1.Tree对象介绍 2.Tree对象说明 (1)初始化一个新的本地版本库 (2)创建一个树对象(重点) (3)创建第二个文件(重点) (4)将第一个树对象加入暂存区,使其成为新的树对 3.总结 ...
随机推荐
- HCNP Routing&Switching之端口隔离
前文我们了解了组播路由协议稀疏模式中的RP相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16154347.html:今天我们来聊一聊二层交换机中有关v ...
- SpringBoot扩展点EnvironmentPostProcessor
一.背景 之前项目中用到了Apollo配置中心,对接Apollo配置中心后,配置中心的属性就可以在程序中使用了,那么这个是怎么实现的呢?配置中心的属性又是何时加载到程序中的呢?那么我们如果找到了这个是 ...
- 携程开源分布式配置系统Apollo服务端是如何实时更新配置的?
引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...
- Spring 源码(7)Spring的注解是如何解析的?
上一篇 https://www.cnblogs.com/redwinter/p/16196359.html 介绍了BeanFactoryPostProcessor的执行过程,这篇文章介绍Spring中 ...
- create-react-app的TS支持以及css模块化
开始: 利用官方脚手架,搭建react工程.参考:https://react.docschina.org/docs/create-a-new-react-app.html. 过程: 1.暴露webpa ...
- [游记] pkusc 2021 游记
流水账 Day-4 写了ICPC的一道DP,有点细节,虽然写得有点难受,但挺好玩 Day-3 写了PKUSC2018最水的一题 是随机开的题 Day-2 可以去pkusc了,从今天中午开始停课 刚吃完 ...
- 1.2 Linux是什么,有哪些特点?
与大家熟知的 Windows 操作系统软件一样,Linux 也是一个操作系统软件,其 logo 是一只企鹅(如图 1 所示).与 Windows 不同之处在于,Linux 是一套开放源代码程序的.可以 ...
- Vue.js 3.x 双向绑定原理
什么是双向绑定? 废话不多说,我们先来看一个 v-model 基本的示例: <input type="text" v-model="search"> ...
- SQL注入到getshell
SQL注入到getshell 通过本地 pikachu来复现 前提: 1.存在SQL注入漏洞 2.web目录具有写入权限 3.找到网站的绝对路径 4.secure_file_priv没有具体值(se ...
- Web Api源码(路由注册)
这篇文章只是我学习Web API框架的输出,学习方法还是输出倒逼输入比较行得通,所以不管写的好不好,坚持下去,肯定有收获.篇幅比较长,仔细思考阅读下来大约需要几分钟. 做.NET开发有好几年时间了,从 ...