git对象

本文介绍了Git对象的SHA1哈希值,包括commit、tree和parent,以及它们在Git库中的作用。通过示例展示了如何查看不同类型的Git对象内容,并解释了HEAD、master和refs/heads/master之间的关系,以及如何使用HEAD符号引用不同的提交历史。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、SHA1哈希值
查看日志详细输出:
这里写图片描述
上图中包含三个哈希值(40位十六进制数字)表示的对象ID:
commit :这是本次提交的唯一标识
tree :本次提交所对应的目录树
parent :本地提交的父提交(上一次提交)

查看这三个引用对象ID的类型,ID值可以不用写全,只要前几位不冲突就行:
这里写图片描述

查看对象的内容(第一个是树对象,第二个是commit对象):
这里写图片描述

上面的目录树对象中存在一种新类型的对象:blob。这个对象保存着we.txt 和welcome.txt的内容:
这里写图片描述

这些对象都是保存在Git库中的objects目录下。
这里写图片描述
上图中,最左上角的commit对象,是本次提交的唯一标识。它的parent指向上一次提交;它的tree指向本次提交对应的目录;

HEAD和master
这里写图片描述
上面三个命令的结果都是一样的,具有相同的指向:
查看之间的关系:
这里写图片描述
上图说明:HEAD指向一个引用:refs/heads/master。
查看该引用:
这里写图片描述
原来分支master指向的是一个提交ID(本次最新提交)。

一个接近真实的版本库结构图:
这里写图片描述
目录 .git/refs 是保存引用的命名空间;其中 .git/refs/heads目录下的引用又称为分支,比如 refs/heads/master分支,也可直接去掉前面两级目录直接用master表示。
所以,HEAD、master 和 refs/heads/master 都指向同一个commit对象:
这里写图片描述

使用HEAD代表版本库中最近的一次提交;
HEAD^代表版本库的上一次提交,即最近一次提交的父提交;
HEAD^^则代表HEAD^的父提交;
HEAD^1 相当于HEAD^;
HEAD^2 相当于HEAD^^;
也可以使用ID值,例如:519a55~5 即相当于 519a55^^^^^;
也可以找出提交所对应的具体对象,例如:c160b214^{tree} ,那么只会返回该tree对象:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值