使用Git进行DAG与树的对比?

时间:2014-10-16 02:59:26

标签: git data-structures

我经常读到Git使用directed acyclic graph(DAG)数据结构,每次提交都是节点,而分支和标签之类的东西则是指向节点的指针。

但是当我尝试使用像gitk这样的工具来显示我的提交历史时,它看起来更像是树而不是图形,因为每个父子关系都是单向的。

那么,DAG和树之间的区别是什么,特别是关于Git?

1 个答案:

答案 0 :(得分:53)

  

但是当我尝试使用像gitk这样的工具来显示我的提交历史时,它看起来更像是树而不是图形,因为每个父子关系都是单向的。

DAG,如树,可以布置成所有父子关系都是单向的。它们之间的区别在于DAG中的节点可以具有多个父节点。 Git中最常见的情况是合并时。合并提交将包含作为父项合并的所有提交。树不允许节点有多个父节点。

Graph with mergingImage source

注意合并提交C6如何有两个父节点C4和C5。