Git提交的父节点是什么?一个Git提交如何有多个父节点?

45
当我看到这个问题时,我感到非常困惑。我的理解是,前一个提交是当前提交的父提交。

5
合并操作具有两个(或多个)父节点。 - tkausl
1
提交形成有向无环图;因此,一个提交可以有零个或多个父级。这里有一个相关的问题:https://dev59.com/_18d5IYBdhLWcg3w1E90 - jub0bs
3
由于某种原因,您的链接无法点击(stackoverflow 奇怪?)- 现在已经更好/修复,谢谢。同时,我们应该将这个问题关闭为那个问题的重复吗? (我认为可能是的,尽管问题的形式非常不同...) - torek
1
@torek 谢谢。我的链接缺少了 http 协议。已修复。我倾向于将其关闭为重复问题,但我对自己的新的“即时关闭”超能力有些担心。 - jub0bs
1
@Jubobs 嘿,第一次打算“投票关闭”时,我被吓了一跳,发现我实际上已经“关闭”了... - torek
1个回答

59

父提交是当前提交所基于的提交。通常情况下:

  • 当你正常使用 git commit 命令时,当前提交会成为新命令引入的提交的父提交。
  • 当你不快进地 git merge 两个提交(或分支等)时,将创建一个新的提交,其父提交为两个提交。你可以以这种方式合并多个提交,因此新提交可能有多个父提交。

本质上,提交树(或 DAG,如果我们想要更准确)由这些父<-子关系组成,其中子节点(更“近期”的[1]提交)指向父节点(较“早期”的[1]提交)。

唯一的例外是初始提交(或任何其他根提交),它没有父提交。


  • "recent"并不是一个准确的术语,因为您可能在一方面有一个非常旧的分支,在另一方面有一个非常新的分支。而且,一个子提交可能比其他某个父提交要“老”得多。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接