我经常读到Git使用directed acyclic graph(DAG)数据结构,每次提交都是节点,而分支和标签之类的东西则是指向节点的指针。
但是当我尝试使用像gitk这样的工具来显示我的提交历史时,它看起来更像是树而不是图形,因为每个父子关系都是单向的。
那么,DAG和树之间的区别是什么,特别是关于Git?
答案 0 :(得分:53)
但是当我尝试使用像gitk这样的工具来显示我的提交历史时,它看起来更像是树而不是图形,因为每个父子关系都是单向的。
DAG,如树,可以布置成所有父子关系都是单向的。它们之间的区别在于DAG中的节点可以具有多个父节点。 Git中最常见的情况是合并时。合并提交将包含作为父项合并的所有提交。树不允许节点有多个父节点。
注意合并提交C6如何有两个父节点C4和C5。