背景

平时经常使用git感觉这个图谱和自己理解的总是差一点味道,然后就百度看了下总算搞清楚了。顺便测试了一下其他自己不怎么使用的功能。

工具

git sourceTree(git图形化客户端工具)

git图谱

什么是Git图谱?

Git图谱常见于Git图形化客户端工具(包括SourceTree、Tortoise等)中,利用不同颜色的点、线结合时间轴按照一定规律,呈现项目的版本演进记录。

CY_2020-11-30-17-00-23

git图谱理解

不同颜色的线到底代表什么?

从图上我们可以看出,每一个点后面都有对应的commit message,提交时间,提交作者和哈希值几个主要信息,这些信息都是一一对应的,所以,可以确定:每一个点代表一次提交记录。

应该是两个仓库的提交出现分歧时,才衍生了新的支线。这个时候,我想到了分布式版本控制系统这个词。在只有一种分支的情况下,有多少个本地仓库,就有可能衍生出多少条支线,从图谱上看到的,实际是项目的分布式进展情况。

虽然支线不一定代表分支,但是,新创建一个分支必然会产生一条新的支线(排除极端情况你创建分支后只提交一次,且你的合并分支上没有人提交过代码)。但是,我们应该要知道,不是因为新创建分支产生了支线,而是,我们在分支上的改动与主线有分歧,才出现了新的支线。有一个细节是,在刚刚创建完分支,并且提交改动的时候,支线并没有出现,只有当切换分支,提交改动后,才产生新的支线。

关于主线

项目最早的一次提交与最近的一次提交连成的最长的直线就是主线,也是唯一的一条直线,它的走向也就是时间轴的走向。主线上衍生支线,支线上又会衍生出新的支线。

总结

综上所述,得出以下几点:

  • 新的分支commit的差异,产生了新的支线

  • 同一分支,不同仓库commit的差异,产生了新的支线

  • 同一分支,不同仓库的merge,合并了支线

  • 不同分支的merge合并了支线

如果你知道,Git每次提交操作保存的提交对象包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针(首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象,而由多个分支合并产生的提交对象有多个父对象),也就理解,为什么会呈现出这样的图谱了。

在实际工作中,Git图谱的复杂导致我们几乎忽略了它的存在,况且我们开发时也并不需要它,但我们通过研究图谱,加深对Git基础设计的了解,还是非常有意义的。

sourceTree的功能测试

git工作流常用

通过建立不同的分支来开发,便于开发人员在开发过程中切换工作内容

建立新的发布版本 相当于做了个标签 便于检出代码 发版本

其他

提交记录上右击的弹框内容:

检出: 检出这个版本的代码(当前记录以后的代码)

重置当前分支到此处记录: 本地git提交记录代码回退到这个位置(远程代码是没有变化的),此记录之后提交的代码呈现没有添加的状态

回滚提交: 此记录处提交的代码删除(后续有人修改过会出现冲突)