『现学现忘』Git基础 — 17、Commit对象

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

目录* 1、Commit对象介绍

  • 2、Commit对象说明
  • 3、本地库中对象之间的关系
  • 4、总结
  • 5、练习
  • 6、本文用到的命令总结

1、Commit对象介绍

现在来介绍最后一种Git对象commit对象,也叫提交对象。

提交对象可以理解为是对树对象的一层封装,提交信息包括基于当前暂存区中索引文件生成的tree对象,还有包含了提交时间,提交者信息,作者信息,以及提交备注等内容,更重要的是里面还包含了父提交的ID,由此就可以形成Git提交的有向无环图。(是链式的关系,把所有commit对象关联起来)

即:commit对象通常指向一个 tree 对象,并且封装了文件的提交时间,提交者信息,作者信息,提交备注,以及父提交引用等数据。

下面是commit对象的存储结构:

2、Commit对象说明

我们通过练习来说明commit对象,接着用前面Tree对象的本地版本库。

(1)创建一个commit对象

我们可以通过调用commit-tree命令创建一个提交对象,为此需要指定一个树对象的SHA-1值,以及该提交的父提交对象。

说明:使用commit-tree命令来创建提交对象,一般都需要和父提交进行关联,如果是第一次将暂存区的文件索引数据提交到本地版本库,那么该提交操作就不需要指定父提交对象。

1)我们可以先查看一下此时Git本地库中的对象,如下

bash

.git/objects/01/ab2a43b1eb150bcf00f375800727df240cf653 # 第三个tree树对象
.git/objects/0c/1e7391ca4e59584f8b773ecdbbb9467eba1547 # test.txt第二个版本(blob对象)
.git/objects/16/3b45f0a0925b0655da232ea8a4188ccec615f5 # 第二个tree树对象
.git/objects/83/baae61804e65cc73a7201a7252750c76066a30 # test.txt第一个版本(blob对象)
.git/objects/d8/329fc1cc938780ffdd9f94e0d364e0ea74f579 # 第一个tree树对象
.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 # new.txt第一个版本(blob对象)

2)我们通过第一个树对象,创建一个commit对象

bash

# 1.做提交操作,创建一个commit对象
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/git\_learning (master)
$ echo 'first commit' | git commit-tree d8329f
3ceba95d3cd9cce982d31e41e3b995ece72f755d# 2.确定该对象类型
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/git\_learning (master)
$ git cat-file -t 3ceba95d3c
commit# 3.查看该对象内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/git\_learning (master)
$ git cat-file -p 3ceba95d3c
tree d8329fc1cc938780ffdd9f94e0d364e0ea74f579
author sun\_wk  1618190880 +0800
committer sun\_wk  1618190880 +0800first commit

说明:

  • tree:表示该commit对象所指向的tree对象的索引
  • author:表示该文件的作者。
  • committer:表示该文件的提交者。
  • first commit:这段文本是提交备注。(备注与前面留空一行)
  • 因为是第一次进行commit提交操作,所以没有父提交信息。
  • 1618190880 +0800:表示时间,一个时间戳。

即:commit对象的格式很简单:指明了该时间点项目快照的顶层树对象、作者/提交者信息(从 Git 设置的 user.nameuser.email中获得),以及当前时间戳、留空一行,最后是提交注释。

提示:git commit-tree命令不但生成了提交对象,而且会将对应的快照(树对象)提交到本地库中。

(2)创建第二个commit对象

根据第二个tree对象和第一个commit对象,来创建第二个commit对象。

通过-p选项指定父提交对象。

bash

# 1.创建第二个commit对象
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/git\_learning (master)
$ echo 'second commit' | git commit-tree 163b45f0a09 -p 3ceba95d3cd9cc
60e1c209e9de87314ec47cf28e61de8df5362fe6# 2.查看该对象内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/git\_learning (master)
$ git cat-file -p 60e1c209e9de8
tree 163b45f0a0925b0655da232ea8a4188ccec615f5
parent 3ceba95d3cd9cce982d31e41e3b995ece72f755d
author sun\_wk  1618193286 +0800
committer sun\_wk  1618193286 +0800second commit

提交对象的格式很简单:

它先指定一个顶层树对象,代表当前项目快照;

然后是可能存在的父提交;

之后是作者/提交者信息(依据你的 user.nameuser.email 配置来设定,外加一个时间戳);

留空一行,最后是提交注释。

第三个commit提交,同上,这里就不演示了。

3、本地库中对象之间的关系

我们可以查看一下此时Git本地库中的对象

bash

.git/objects/01/ab2a43b1eb150bcf00f375800727df240cf653 # 第三个tree树对象
.git/objects/0c/1e7391ca4e59584f8b773ecdbbb9467eba1547 # test.txt第二个版本(blob对象)
.git/objects/16/3b45f0a0925b0655da232ea8a4188ccec615f5 # 第二个tree树对象
.git/objects/3c/eba95d3cd9cce982d31e41e3b995ece72f755d # 第一个commit提交对象
.git/objects/46/ab608799a0e65e970b67b9b52f6c1407c39036 # 第三个commit提交对象
.git/objects/60/e1c209e9de87314ec47cf28e61de8df5362fe6 # 第二个commit提交对象
.git/objects/83/baae61804e65cc73a7201a7252750c76066a30 # test.txt第一个版本(blob对象)
.git/objects/d8/329fc1cc938780ffdd9f94e0d364e0ea74f579 # 第一个tree树对象
.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 # new.txt第一个版本(blob对象)

可以从上面看到,此时的本地版本库中共有9个对象,三个blob对象,三个tree对象,三个commit对象。

他们之间的关系如下图:

4、总结

  1. 提交是我们经常使用的Git动作,每次提交操作都指向一个树对象,同时会产生一个commit对象。
    即:一个commit对象包含了一个tree对象,这个tree对象记录了在那个时间点,项目包含了什么文件夹和什么文件。
  2. 一个提交对象可以有一个或者多个父提交。
  3. 每次commit操作都会基于当前索引文件index新建tree对象。那么当前索引文件,是在上次提交的基础上更新来的,所以每次提交产生的commit对象,与其他的commit对象,都有前后关系或者称为父子关系。
  4. 对于我们来说,不需要直接访问blob对象和tree对象,我们直接访问commit对象就可以了。
    即:commit对象对应的tree对象下面,又包含了小的tree对象和blob对象,子的tree对象一层层展开,最后叶子节点就是一个个blob对象,也就是一个个文件。

到这里,我们就能够清楚的了解,什么叫一个Git版本。tree对象才是一次项目版本的快照,提交对象是对tree对象的一次封装。

即:

  • 项目的快照就是一个树对象。
  • 项目的版本就是一个提交对象。

而且Git的每一个版本,存储的不是增量,而存储的是当前项目的快照。同时objects目录中相当于存放了项目的所有历史记录,回滚就相当的方便了,找到对应的commit对象的hash就可以了。

5、练习

请问下图中包含多少个tree对象和blob对象?

一共包含两个tree对象,一个blob对象,一个commit对象。

说明:

  • 一个commit对象一定对应一个tree对象(这个tree对象应该是一个完整项目仓库的快照)
  • doc目录下有一个blob对象,也就是readme文件。

6、本文用到的命令总结

Git底层命令:

  • git commit-tree:生成一个commit对象。
  • git cat-file -t 键:查看Git对象的类型。
  • git cat-file -p 键:查看Git对象的内容。

参考:

  • https://blog.csdn.net/songyuequan/article/details/85862415
  • https://blog.csdn.net/jasongrass/p/10582465.html
  • 1、Commit对象介绍

  • 2、Commit对象说明

  • 3、本地库中对象之间的关系

  • 4、总结

  • 5、练习

  • 6、本文用到的命令总结

    __EOF__

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jvX2J7TC-1651034561558)(https://blog.csdn.net/liuyuelinfighting)]繁华似锦的博客 - 本文链接: https://blog.csdn.net/liuyuelinfighting/p/16198051.html

  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角**【[推荐](javascript:void(0)😉】**一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring/MVC映射WEB-INF下的文件(img、css、js等)

学过Mvc的都知道并且会访问该目录下面的jsp 页面&#xff08;这是最基础的&#xff09; 但我们想访问里面的图片什么的&#xff0c;又该怎么去访问呢&#xff0c; 一句代码&#xff1a; <mvc:resources mapping"/img/**" location"/WEB-INF/img/"/> …

《HelloGitHub》第 73 期

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

typora + EasyBlogImageForTypora直接上传图片到博客园

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

20155320 第十一周课堂总结

20155320 第十一周课堂总结 未及时提交原因&#xff1a; 对代码掌握的不熟练&#xff0c;并且由于起初不知道自己电脑浏览器不支持蓝墨云图片提交&#xff0c;尝试几次后只能把图片传到手机上导致截图没有及时提交 1,。测试题目 1.修改教材P74 一行代码 NineNineTable.java, 让…

.NET混合开发解决方案14 WebView2的基本身份验证

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

MyEclipse10破解详细说明

MyEclipse10破解详细教程 1.先安装好jdk&#xff0c;再安装好myeclipse10&#xff0c;并关闭该软件(jdk下载安装教程 http://blog.csdn.net/qq_36330228/article/details/75268398) 2.下载破解工具&#xff0c;打开me_active.jar 3.输入任意用户名&#xff0c;点击Systemid按…

中国电子云数据库 Mesh 项目 DBPack 的实践

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

(百度、谷歌)地图经纬度gps偏移解决办法:gps纠偏数据库纠偏

使用方法&#xff1a; 1、假设原始gps数据为&#xff08;73.528888&#xff0c;39.368888&#xff09; 2、查询数据库&#xff1a;SELECT * FROM offset where lng73.52 and lat39.36&#xff0c;得出offsetlat、offsetlng 3、用原始的lat加上offsetlat&#xff0c;lng加上offs…

国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(中)

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

(数据科学学习手札136)Python中基于joblib实现极简并行计算加速

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

date数据要在前台显示

date数据要在前台显示&#xff0c;如果要截取一部分使用&#xff0c;最好用SimpleDateFormat不要用toString不牢靠。 转载于:https://www.cnblogs.com/king12345678/archive/2012/12/07/2807604.html

被迫开始学习Typescript —— class

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

ASP.NET实现二维码(QRCode)的创建和读取

一、项目引用QRCode的DLL文件&#xff08;ThoughtWorks.QRCode.dll&#xff09; 二、ASPX页面&#xff08;两个jquery的js文件请自行去官网下载&#xff09;&#xff1a;[html] <html xmlns"http://www.w3.org/1999/xhtml"> <head runat"server"…

杨玉基:知识图谱在美团推荐场景中的应用

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Redis进阶知识一览

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

UI代码练习-视图的层次关系

2019独角兽企业重金招聘Python工程师标准>>> // // AppDelegate.h // 视图的层次关系 // // Created by on 14-12-17. // Copyright (c) 2014年 apple. All rights reserved. //#import <UIKit/UIKit.h> #import <CoreData/CoreData.h>interface Ap…

arthas学习图文记录

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

利用矩阵的n次方求图的连通性

设A&#xff08;n x n&#xff09;为一个图的邻接矩阵&#xff0c;则a(i,j)表示两个点之间是否连通&#xff08;1&#xff1a;连通&#xff0c;0&#xff1a;不连通&#xff09;。那么A的k次方中的每一个a&#xff08;i&#xff0c;j&#xff09;表示点i和j之间长度为k的路的条…

使用HBuilder新建项目

依次点击文件→新建→选择Web项目(按下CtrlN,W可以触发快速新建(MacOS请使用CommandN,然后左键点击Web项目)) 如上图&#xff0c;请在A处填写新建项目的名称&#xff0c;B处填写(或选择)项目保存路径(更改此路径HBuilder会记录&#xff0c;下次默认使用更改后的路径)&#xff0…

iOS应用开发视频教程笔记(二)My First iOS App

这课主要是以一个计算器一个用为例子&#xff0c;教你怎么使用XCode&#xff0c;如何使用MVC设计模式创建应用。 (1)新建一个single view application模版的应用 打开xcode并点击“创建一个新xcode项目”&#xff0c;进入项目创建界面&#xff0c;这个界面让我们为应用选择一个…