[英]Is there a way to get the number of children of a git commit node?
我想在提交图中找到第 n 个节点,从那里它有 2 个或更多的孩子。 所以如果历史是:
A -- B -- C -- D
\
E -- F*
而且我在F
,如果我正在搜索有多个孩子的第一个节点,我想找到B
。
我将如何做到这一点?
Git 的所有内部链接都向后指向,从子级到父级:
A <-B <-C <-D
↖︎ [this is an up-and-left arrow, but it may not work in some fonts]
E <-F
也就是说, git rev-list
能够在遍历图形时反转链接。 因此,您可以从F
向后遍历图形,反转每个链接以构建子项列表。 这里的问题是 Git 只能看到它所走的链接:
A-> B <-C <-D
↘︎ [this is a down-and-right arrow]
E-> F
这意味着即使使用执行此操作的git rev-list
选项( --children
),Git 也会声称B
有一个孩子,即E
。 要让 Git 声明B
有两个孩子, E
和C
,您必须从F
和D
开始,以便git rev-list
从D
返回到C
再到B
:
A-> B-> C-> D
↘︎ [this is a down-and-right arrow]
E-> F
你可以得到Git的使用在所有分支名称开始--branches
,或使用所有的标签名称--tags
,或所有引用(包括像refs/stash
使用) --all
。 将--topo-order
添加到git rev-list
命令,您将获得提交及其子项的列表。 从这个列表中,您将需要最后一次提交,该提交导致F
但也有多个子项。 不幸的是,这里git rev-list
的输出仍然不是非常有用。 为了快速完成这项工作,您可能需要编写自己的图形阅读器,在这种情况下,您可以进行自己的内部标记,并且可以使用git rev-list --parents --all
或类似命令。
(这项工作在 Mercurial 中要容易得多,尽管即使在那里它可能仍然很重要。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.