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

系列文章目录

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


文章目录

  • 系列文章目录
  • 一、前言
    • 1. 获取当前版本
    • 2. 获取历史版本
  • 二、追溯历史版本
    • 1. 首先使用git log获取最近的提交记录
    • 2. 使用获取到的commit来获取信息
    • 3. 通过parent查看以前的内容
  • 三、GIt回滚
    • 1. 命令
  • 四、Git修改历史版本
    • 1. 命令
    • 2. 悬空的object
    • 3. git gc


一、前言

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

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

四、Git修改历史版本

1. 命令

git commit --amend

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

2. 悬空的object

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

git fsck --lost-found

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

3. git gc

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

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

gc之后,可以看到目录结构已经改变了,其实本质上只删除了悬空的object,其他的都打包在.git/packed-refs目录下。文章来源地址https://uudwc.com/A/qkWP

原文地址:https://blog.csdn.net/qq_39825705/article/details/125117403

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月16日 18:21
下一篇 2023年06月16日 18:22