数据结构-DAG与使用Git的树?

我经常读到Git使用有向无环图(DAG)数据结构,每个提交都是一个节点,而分支和标签之类的东西则是指向节点的指针。

但是,当我尝试使用gitk之类的工具来可视化提交历史记录时,由于每个父子关系都是以一种方式定向的,因此它看起来更像树而不是图。

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

Jonathan.Brink asked 2020-06-30T02:54:47Z
1个解决方案
61 votes

但是,当我尝试使用gitk之类的工具来可视化提交历史记录时,由于每个父子关系都是以一种方式定向的,因此它看起来更像树而不是图。

可以像树一样布置DAG,以使所有父子关系都是单向的。 它们之间的区别在于,DAG中的节点可以具有多个父节点。 在Git中最常见的情况是您进行合并。 合并提交将具有所有作为父级合并的提交。 一棵树不允许节点具有多个父节点。

Graph with merging(图片来源)

请注意,合并提交C6如何具有两个父级C4和C5。

John Kugelman answered 2020-06-30T02:55:15Z
translate from https://stackoverflow.com:/questions/26395521/dag-vs-tree-using-git