git学习日志-git保存数据的简介

接下来几章将学习git分支,但是在了解git分支之前,有必要先回顾下git是如何保存数据及数据的组成:

  • git保存的不是文件的变化或差异,而是一系列不同时刻的快照;
  • 在进行提交操作时,git会保存一个提交对象;
    • 这个提交对象会包含一个指向暂存内容快照的指针,
    • 这个提交对象还包含作者的姓名,邮箱、输入的注释,
    • 这个提交对象还包含指向它的父对象的指针,
      • 首次提交产生的提交对象没有父对象
      • 普通提交的提交对象有一个父对象
      • 由多个分支合并产生的提交对象有多个父对象

为了更好的理解git是如何保存数据的,假设现在有一个工作目录,里面包含了三个将要提交的文件。

  1. git会为每个文件计算校验和;
  2. git会把当前版本的文件快照保存到git仓库中(git使用blob对象保存它们),并将校验和加入到暂存区等待提交;
  3. 当进行提交操作时,git会先计算每个子目录的校验和,然后在git仓库中将这些校验和保存为树对象;
  4. git创建一个提交对象,除了包含以上提到的信息,还会包含指向这个树对象的指针。

至此,git仓库中总共有五个对象,分别是:三个blob对象(保存文件快照)、一个树对象(记录目录结构和blob对象索引)、一个提交对象(包含指向前述对象的指针及所有提交信息)。

提交时,仓库中的五个对象

当对文件做了修改后再提交,那么这次产生的提交对象会包含一个指向上次提交对象(父对象)的指针。

修改后再提交

git的分支,其本质仅仅是指向提交对象的可变指针。git的默认分支名称是master。在多次提交后,我们其实已经有一个指向最后那个提交对象的master分支了。master分支会在每次提交时自动向前移动。

你可能感兴趣的:(git学习日志-git保存数据的简介)