git之reflog命令的使用

 更新时间:2023年08月23日 09:42:14   作者:一户董  
git reflog 命令可以用来查看本地仓库的所有操作记录,包括所有分支的提交、合并、重置等操作,本文就详细的介绍一下如何使用,感兴趣的可以了解一下

写在前面

本文一起看下reflog命令。

1:场景描述

在开发的过程中,因为修改错误,想要通过git reset命令恢复到之前的某个版本,但是选择提交ID错误,导致多恢复了一个版本,假定,该版本对应的内容还没有push到远端仓库,并且该提交十分重要,可能决定了一个将要倒闭的公司是否能够继续 苟延残喘 ,怎么办?肯定要恢复回来,git reflog就可以帮你轻松搞定。本文从纯命令操作方式和sourcetree界面操作方式来进行模拟。

2:纯命令操作

2.1:初始化git仓库

$ pwd
/d/test/testreflog
JHP+Administrator@jhp MINGW64 /d/test/testreflog
$ git init
Initialized empty Git repository in D:/test/testreflog/.git/

2.2:执行3次提交

添加a.txt并提交

$ touch a.txt
JHP+Administrator@jhp MINGW64 /d/test/testreflog (master)
$ echo "a" > a.txt
JHP+Administrator@jhp MINGW64 /d/test/testreflog (master)
$ git add a.txt
warning: LF will be replaced by CRLF in a.txt.
The file will have its original line endings in your working directory
JHP+Administrator@jhp MINGW64 /d/test/testreflog (master)
$ git commit -m'add a.txt'
[master (root-commit) 0c70790] add a.txt
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt

添加b.txt并提交

$ touch b.txt
JHP+Administrator@jhp MINGW64 /d/test/testreflog (master)
$ echo 'b' > b.txt
JHP+Administrator@jhp MINGW64 /d/test/testreflog (master)
$ git add b.txt
warning: LF will be replaced by CRLF in b.txt.
The file will have its original line endings in your working directory
JHP+Administrator@jhp MINGW64 /d/test/testreflog (master)
$ git commit -m'add b.txt'
[master b68fdbe] add b.txt
 1 file changed, 1 insertion(+)
 create mode 100644 b.txt

添加c.txt并提交

$ touch c.txt
JHP+Administrator@jhp MINGW64 /d/test/testreflog (master)
$ echo 'c' > c.txt
JHP+Administrator@jhp MINGW64 /d/test/testreflog (master)
$ git add c.txt
warning: LF will be replaced by CRLF in c.txt.
The file will have its original line endings in your working directory
JHP+Administrator@jhp MINGW64 /d/test/testreflog (master)
$ git commit -m'add c.txt'
[master 1b263f8] add c.txt
 1 file changed, 1 insertion(+)
 create mode 100644 c.txt

查看提交日志

$ git log -9 --pretty=oneline
1b263f8227fbb8050cee5bde301c11fa6a4d3467 (HEAD -> master) add c.txt
b68fdbe04611a68e16f538f1efb63727c1fc5e64 add b.txt
0c70790e7d7b54a582c81defe27a49b47df1e6db add a.txt

模拟错误操作

假定 add c.txt 是我们误操作,因此我们需要执行命令 git reset --hard b68fdbe046 来恢复到其之前的一个版本,但是操作失误,一直还原到了 add a.txt 对应的提交,如下:

$ git reset --hard 0c70790e7d7b
HEAD is now at 0c70790 add a.txt
JHP+Administrator@jhp MINGW64 /d/test/testreflog (master)
$ git log -n9 --pretty=oneline
0c70790e7d7b54a582c81defe27a49b47df1e6db (HEAD -> master) add a.txt

在准备工作中,当我们执行 git reset --hard 后,被恢复代码之后的提交通过git log就看不到了,但是git reflog其实是可以看到的,因为该命令看到的是进行过的所有的操作,对比如下图:

如下:

$ git reflog -n9 --pretty=oneline
0c70790 (HEAD -> master) HEAD@{0}: reset: moving to 0c70790e7d7b
1b263f8 HEAD@{1}: reset: moving to HEAD
1b263f8 HEAD@{2}: commit: add c.txt
b68fdbe HEAD@{3}: commit: add b.txt
0c70790 (HEAD -> master) HEAD@{4}: commit (initial): add a.txt

注意这里的 HEAD@{n} 表示head指针在n次移动之前的情况,比如我们要恢复到 add b.txt 的提交,只需要执行如下操作即可:

$ git reset --hard HEAD@{3}
HEAD is now at b68fdbe add b.txt
JHP+Administrator@jhp MINGW64 /d/test/testreflog (master)
$ git log -n3 --pretty=oneline
b68fdbe04611a68e16f538f1efb63727c1fc5e64 (HEAD -> master) add b.txt
0c70790e7d7b54a582c81defe27a49b47df1e6db add a.txt

3:sourcetree界面操作

3.1:初始化git仓库

git init

3.2:使用sourcetree打开仓库

然后选择仓库的文件夹即可。

此时因为我们什么也没有做,所以信息都是空的。

3.3:创建文件a.txt并提交

$ touch a.txt
JHP+Administrator@jhp MINGW64 /d/test/testreflog (master)
$ echo "a" > a.txt

暂存并提交:

接着同样的方式,添加b.txt,c.txt,最终如下图:

3.4:模拟错误操作

假定 add c.txt是我们误操作,因此我们需要恢复到其之前的一个版本,但是操作失误,一直还原到了add a.txt对应的提交,如下:

3.5:恢复操作

同命令行方式。这里sourcetree没有提交对应的UI操作。

写在后面

参考文章列表

【学了就忘】Git操作 — 51.git reflog命令 。

git救急之reflog恢复错误的提交 。

到此这篇关于git之reflog命令的使用的文章就介绍到这了,更多相关git reflog命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 适合后台管理系统开发的12个前端框架(小结)

    适合后台管理系统开发的12个前端框架(小结)

    当你写项目的时候,如何快速的完成一个项目的搭建,这个时候就需要借助到一些模板了,前端开发的一个好处就是,各类UI模板都是相当的齐全的,本文就介绍几个前端框架,感兴趣的可以了解一下
    2021-06-06
  • ToDesk安装与使用教程(全平台支持)

    ToDesk安装与使用教程(全平台支持)

    这篇文章主要介绍了ToDesk安装与使用教程,ToDesk非常好用而且是全平台支持,喜欢的朋友跟随小编一起看看吧
    2024-08-08
  • Hive 判断某个字段长度的示例代码

    Hive 判断某个字段长度的示例代码

    hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制,这篇文章主要介绍了Hive 判断某个字段长度,需要的朋友可以参考下
    2024-08-08
  • RPC、RMI、SOAP的区别详解

    RPC、RMI、SOAP的区别详解

    这篇文章主要介绍了RPC、RMI、SOAP的区别详解,本文还同时讲解了RPC、SOAP、WSDL的关系,需要的朋友可以参考下
    2015-07-07
  • HTTP状态代码集合 方便查询

    HTTP状态代码集合 方便查询

    HTTP协议是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
    2011-02-02
  • 联邦学习论文解读分散数据的深层网络通信

    联邦学习论文解读分散数据的深层网络通信

    这篇文章主要为大家介绍了论文解读分散数据的深层网络通信有效学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Ollama整合open-webui的步骤及访问

    Ollama整合open-webui的步骤及访问

    这篇文章主要介绍了如何通过源码方式安装OpenWebUI,并详细说明了安装步骤、环境要求以及第一次使用时的账号注册和模型选择过程,需要的朋友可以参考下
    2025-02-02
  • 合成大西瓜开发源码手把手教你运行和部署大西瓜游戏项目(附源码)

    合成大西瓜开发源码手把手教你运行和部署大西瓜游戏项目(附源码)

    这篇文章主要介绍了合成大西瓜开发源码手把手教你运行和部署大西瓜游戏项目(附源码),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 浅谈音视频 pts dts基本概念及理解

    浅谈音视频 pts dts基本概念及理解

    本文主要介绍了音视频 pts dts基本概念及理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 深入理解TCP协议与UDP协议的原理及区别

    深入理解TCP协议与UDP协议的原理及区别

    网络编程有三个要素,分别是IP地址、端口号和通信协议,那本文主要讲述的是TCP与UDP这两种通信协议,以及编程的实现,感兴趣的可以了解一下
    2021-06-06

最新评论