当前位置:首页 > 技术分析 > 正文内容

Git回滚指定的文件

ruisui884个月前 (03-08)技术分析20

GIT

前文介绍过Git回滚,回滚的上某个提交,Git也可以回滚某个提交的某个文件

如果对git reset不太熟悉,可以参考前文:Git回滚代码(git reset)

通过指定文件文件回滚

现在对一个文件test.txt已经经过了三次提交,文件内容从v1->v2->v3。先看看提交历史,查看历史通过git log命令。

$ git log
commit e54cfa3872518a8c9d14c1c778b76d1963999338 (HEAD -> master)
Author: Java猿 <1351891797@qq.com>
Date:   Sat Jun 25 10:37:20 2022 +0800

    v3

commit 618d1658b3635e0529a3347aedf1413e57bf9568
Author: Java猿 <1351891797@qq.com>
Date:   Sat Jun 25 10:36:45 2022 +0800

    v2

commit 360b025b94d2bfa4933be4a69c14ab8cf8527d11
Author: Java猿 <1351891797@qq.com>
Date:   Sat Jun 25 10:35:14 2022 +0800

    v1

HEAD

此时修改了工作区的test.txt内容为v4并且提交到暂存区后,如果想撤回可以执行命令git reset HEAD test.txt,执行后暂存区的内容会回滚到v3。

修改工作区和暂存区的文件版本:

修改工作区和暂存区的文件版本

执行reset后的版本:

执行reset后的版本

$ git ls-files -s
100644 c694117fd4e76c22ae04348c15861413019aa03b 0       test.txt
$ git cat-file -p c694117fd4e76c22ae04348c15861413019aa03b
v4
$ git reset HEAD test.txt
Unstaged changes after reset:
M       test.txt
$ git ls-files -s
100644 b3b96777307e3b8d0e833c26b6d28cd202056e5c 0       test.txt
$ git cat-file -p b3b96777307e3b8d0e833c26b6d28cd202056e5c
v3
$ cat test.txt
v4

上面的命令git ls-files -s是查看暂存区的文件,git cat-file -p commit-id查看某个提交的文件内容,在回滚前文件是v4,执行完暂存区的文件内容为v3,而工作区的内容为v4。

此时的HEAD的指针上不变的,通过git log查看:

$ git log -1
commit e54cfa3872518a8c9d14c1c778b76d1963999338 (HEAD -> master)
Author: Java猿 <1351891797@qq.com>
Date:   Sat Jun 25 10:37:20 2022 +0800

    v3

git reset HEAD 这个命令实现了撤销暂存区的内容,和git rm --cached filename在某些情况下是一样的。git rest必须已经提交了的文件,git rm --cached可以删除未提交的。

回滚指定提交的文件

使用git reset指定路径可以回滚某次提交的文件,使用的命令为git reset filename。此时文件版本都是v3,如下所示:

当前的版本

执行git reset filename后的文件版本:

reset后的版本

$ git log
commit e54cfa3872518a8c9d14c1c778b76d1963999338 (HEAD -> master)
Author: Java猿 <1351891797@qq.com>
Date:   Sat Jun 25 10:37:20 2022 +0800

    v3

commit 618d1658b3635e0529a3347aedf1413e57bf9568
Author: Java猿 <1351891797@qq.com>
Date:   Sat Jun 25 10:36:45 2022 +0800

    v2

commit 360b025b94d2bfa4933be4a69c14ab8cf8527d11
Author: Java猿 <1351891797@qq.com>
Date:   Sat Jun 25 10:35:14 2022 +0800

    v1

$ git ls-files -s
100644 b3b96777307e3b8d0e833c26b6d28cd202056e5c 0       test.txt
$ git cat-file -p b3b96777307e3b8d0e833c26b6d28cd202056e5c
v3
$ cat test.txt
v3
$ git reset 360b025b94d2bfa4933be4a69c14ab8cf8527d11 test.txt
Unstaged changes after reset:
M       test.txt
$ git ls-files -s
100644 28c218c44b49222f91536daf5b4d9871638edc8e 0       test.txt
$ git cat-file -p 28c218c44b49222f91536daf5b4d9871638edc8e
v1
$ cat test.txt
v3

后续把git的回滚操作录个视频,欢迎留言讨论,谢谢!

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2620.html

标签: git删除commit
分享给朋友:

“Git回滚指定的文件” 的相关文章

gitlab常用命令大全

GitLab常用命令大全GitLab是一个基于Git的Web平台,它不仅提供代码托管,还集成了持续集成/持续交付(CI/CD)、代码审查、问题追踪等功能。在日常使用GitLab的过程中,我们常常需要使用一系列命令来管理代码仓库、处理分支和标签等。以下是GitLab常用的Git命令大全,并附上详细解释...

GitLab-合并请求

描述合并请求可用于在您对项目进行的其他人员之间交换代码,并轻松与他们讨论更改。合并请求的步骤步骤1-在创建新的合并请求之前,GitLab中应该有一个创建的分支。您可以参考本章来创建分支-步骤2-登录到您的GitLab帐户,然后转到“ 项目”部分下的项目 -步骤3-单击“ 合并请求”选项卡,然后单击“...

理解virt、res、shr之间的关系(linux系统篇)

前言想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过top命令查看进程占用了多少内存。这里我们可以看到VIRT、RES和SHR三个重要的指标,他们分别代表什么意思呢?这是本文需要跟大家一起探讨的问题。...

我的VIM配置

写一篇关于VIM配置的文章,记录下自己的VIM配置,力求简洁实用。VIM的配置保存在文件~/.vimrc中(Windows下是C:\Users\yourname \_vimrc)。VIM除了自身可配置项外,还可插件扩展。VIM的插件一般用vundle或vim-plug来管理,但我力求简单,不打算装太...

HTML5+眼球追踪?黑科技颠覆传统手机体验

今天,iH5工具推出一个新的神秘功能——眼动追踪,可以通过摄像头捕捉观众眼球活动!为了给大家具体演示该功能的使用,我做了一个案例,供大家参考。实际效果如下:案例比较简单,就是通过眼动功能获取视觉焦点位置,剔除用户看中的牌。现在,舞台的属性中多了一个“启用眼动”的选项,另外,还多了一个“启用摄像头”的...

「干货」Vue+Element前端导入导出Excel

作者:xrkffgg转发链接:https://segmentfault.com/a/11900000189936191 前言1.1 业务场景由前台导入Excel表格,获取批量数据。根据一个数组导出Excel表格。2 实现原理2.1 引入工具库file-saver、xlsx、script-loader...