git之reflog命令的使用

2024-03-01 0 984
目录
  • 写在前面
  • 1:场景描述
  • 2:纯命令操作
    • 2.1:初始化git仓库
    • 2.2:执行3次提交
  • 3:sourcetree界面操作
    • 3.1:初始化git仓库
    • 3.2:使用sourcetree打开仓库
    • 3.3:创建文件a.txt并提交
    • 3.4:模拟错误操作
    • 3.5:恢复操作
  • 写在后面

    写在前面

    本文一起看下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命令的使用

    如下:

    $ 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打开仓库

    git之reflog命令的使用

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

    git之reflog命令的使用

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

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

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

    暂存并提交:

    git之reflog命令的使用

    git之reflog命令的使用

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

    git之reflog命令的使用

    3.4:模拟错误操作

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

    git之reflog命令的使用

    git之reflog命令的使用

    git之reflog命令的使用

    3.5:恢复操作

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

    写在后面

    参考文章列表

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

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

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

    您可能感兴趣的文章:

    • Git 常用命令速查表(图文+表格)
    • linux系统安装git及git常用命令
    • git push 本地项目推送到远程分支的方法(git命令版)
    • Git代码提交流程及git命令汇总(基础篇)
    • Git命令的简单整理大全
    • 使用git命令上传代码
    • Git的撤销、修改和回退命令
    • git blame命令详解
    • Git pull命令与fetch命令的区别

    收藏 (0) 打赏

    感谢您的支持,我会继续努力的!

    打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
    点赞 (0)

    悠久资源 编程综合 git之reflog命令的使用 https://www.u-9.cn/biancheng/bczonghe/181296.html

    常见问题

    相关文章

    发表评论
    暂无评论
    官方客服团队

    为您解决烦忧 - 24小时在线 专业服务