美文网首页
git 中的提交对象(commit object)

git 中的提交对象(commit object)

作者: 切磋琢磨_FE | 来源:发表于2020-11-30 10:40 被阅读0次

用git进出版本控制的时候,进行提交操作时,Git 会保存一个提交对象(commit object)。

每个提交对象都对应了git的每一次提交记录。

git 是用blob文件存储数据的,提交对象也是以blob文件存储的。

为了形象描述,先初始化一个git仓库:

# apple @ LTMac in ~ [14:25:16] C:127
$ mkdir gitTest

# apple @ LTMac in ~ [14:25:26]
$ cd gitTest && git init
Initialized empty Git repository in /Users/apple/gitTest/.git/

初始化完成后新增 a.txt 文件,并提交。

# apple @ LTMac in ~/gitTest on git:master o [14:26:40]
$ touch a.txt

# apple @ LTMac in ~/gitTest on git:master x [14:27:14]
$ git add a.txt

# apple @ LTMac in ~/gitTest on git:master x [14:27:18]
$ git commit -m 'init add a.txt'
[master (root-commit) f2db080] init add a.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a.txt

此时查看.git/object目录内容

# apple @ LTMac in ~/gitTest on git:master o [14:30:31]
$ cd .git/objects

# apple @ LTMac in ~/gitTest/.git/objects on git:master o [14:30:33]
$ tree
.
├── 65
│   └── a457425a679cbe9adf0d2741785d3ceabb44a7
├── e6
│   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
├── f2
│   └── db0800b86225354c511324d42fd6cb67890fb3
├── info
└── pack

5 directories, 3 files

可以看到.git/object 下多了三个目录。这里面其中一个文件就是commit object,
使用cat-file -t 查看每个blob文件的内容类型

# apple @ LTMac in ~/gitTest/.git/objects on git:master o [14:30:37]
$ git cat-file -t 65a4
tree

# apple @ LTMac in ~/gitTest/.git/objects on git:master o [14:33:25]
$ git cat-file -t e69d
blob

# apple @ LTMac in ~/gitTest/.git/objects on git:master o [14:33:39] 
$ git cat-file -t f2db
commit

发现 f2db0800b86225354c511324d42fd6cb67890fb3 为commit object

使用cat-file -p命令查看f2db080 的content

# apple @ LTMac in ~/gitTest/.git/objects on git:master o [14:37:30] C:128
$ git cat-file -p f2db
tree 65a457425a679cbe9adf0d2741785d3ceabb44a7
author xxx <xxx@xxx.com> 1606717788 +0800
committer xxx <xxx@xxx.com> 1606717788 +0800

init add a.txt

回到上面的提交记录看,刚提交后的hash码是f2db080,正是这个commit object 文件名的前几位。

由于f2db080 是第一次提交,没有parent指针。

我们可以再提交一次内容:

# apple @ LTMac in ~/gitTest on git:master o [14:40:42]
$ touch b.txt

# apple @ LTMac in ~/gitTest on git:master x [14:41:18] C:127
$ git add . && git commit -m 'add b.txt'
[master befa19f] add b.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 b.txt

然后再看看这次提交的comment object content

# apple @ LTMac in ~/gitTest on git:master o [14:41:34]
$ git cat-file -p befa19f
tree 2bdf04adb23d2b40b6085efb230856e5e2a775b7
parent f2db0800b86225354c511324d42fd6cb67890fb3
author litong <litongfe@foxmail.com> 1606718494 +0800
committer litong <litongfe@foxmail.com> 1606718494 +0800

add b.txt

从以上内容可见,提交对象包含了五部分内容
分别是:
tree, parent, author ,committer , mesage
如果是首次提交,commit object 中没有parent指针

相关文章

  • git 中的提交对象(commit object)

    用git进出版本控制的时候,进行提交操作时,Git 会保存一个提交对象(commit object)。 每个提交对...

  • Git 分支 - 分支简介

    分支简介 在进行提交操作时,Git 会保存一个提交对象(commit object)。知道了 Git 保存数据的方...

  • **git** 使用笔记

    git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...

  • 2019-10-25

    git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...

  • git分支探索

    git提交结构图 git完整提交结构图如下所示 full commit graph圆形代表commit对象,椭圆代...

  • git进阶 之 reflog

    示例 提交 git三大对象类型: 数据对象(Blob Object) / 树对象(Tree Object) / 提...

  • 【学了就忘】Git原理 — 21.Git对象[commit对象]

    1、Commit对象介绍 现在来介绍最后一种Git对象commit对象,也叫提交对象。 提交对象可以理解为是对树对...

  • git本地仓库中的提交给撤销掉

    讲解对象:仓库中的提交撤销作者:融水公子 rsgz 2 git add3 git commit -m 4 现在仓库...

  • git分支

    什么是git分支? 什么是git分支?首先让我们回顾一下提交对象,一个提交对象(commit objects)包括...

  • git commit 提交规范(优化)

    git commit 提交模板和规范 Git每次提交代码,都要写 Commit message(提交说明),否则就...

网友评论

      本文标题:git 中的提交对象(commit object)

      本文链接:https://www.haomeiwen.com/subject/xtqrwktx.html