当前位置:   article > 正文

Git历史版本的追溯、修改及回滚_git 回溯

git 回溯

系列文章目录

(一)Git本地仓库的初始化和配置
(二)Git文件代码提交详解
(三)Git分支与标签
(四)Git历史版本的回溯、修改及回滚
(五)Git远端同步



一、前言

1. 获取当前版本

通过ref指向的commitID可以获取当前唯一的代码版本

2. 获取历史版本

Commit中会存有Parent Commit字段,通过Commit的串联关系,可获取到历史版本。

二、追溯历史版本

1. 首先使用git log获取最近的提交记录

在这里插入图片描述

2. 使用获取到的commit来获取信息

在这里插入图片描述
可以看到多了一个parent和前一个版本进行串联。

3. 通过parent查看以前的内容

先获取tree
在这里插入图片描述
再根据tree获取文件blob,这样根据blob就能获取以前版本的文件内容了
在这里插入图片描述

三、GIt回滚

1. 命令

git reset --hard commitID
  • 1

其中commitID可以是上面的parent,也可是是其他节点的commitID
可使用git log获取最近的commitID
在这里插入图片描述

四、Git修改历史版本

1. 命令

git commit --amend
  • 1

通过这个命令可以修改最近一次commit信息,修改之后ref指向的commitID也会被更改。
在这里插入图片描述
使用git log查看已经被修改,commit也发生了变化,所以之前的commit在哪了呢,这儿就有一个新的概念。

2. 悬空的object

悬空的object就是没有ref指向的object,我们使用以下命令进行查看

git fsck --lost-found
  • 1

在这里插入图片描述
可以看到上面我们更改后留下的commit变成了悬空的object,也就是没有用的object,我们可以通过git的GC对他进行处理。

3. git gc

通过git gc可以删除一些不必要的东西,也会把现有的object进行打包压缩,减少空间的占有。
在gc之前我们要进行两个操作:

  1. 修改reflog:
    reflog是用来记录操作日志,防止误操作后的数据丢失,通过reflog来找回丢失的数据,我们这儿手动将日志设置为过期
git reflog expire --expire=now --all
  • 1
  1. 指定gc的时间
    gc默认为修剪两周前的object,我们把它指定为现在
git gc --prune=now
  • 1

gc之后,可以看到目录结构已经改变了,其实本质上只删除了悬空的object,其他的都打包在.git/packed-refs目录下。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/859903
推荐阅读
相关标签
  

闽ICP备14008679号