有没有一种方法来获取git commit节点的子节点数?

时间:2019-04-18 00:59:38

标签: git

我想在提交图中的第n个节点找到2个或更多子节点。因此,如果历史记录是:

F

我在B,如果我要搜索有多个孩子的第一个节点,我想找到// team schedule rows: $('table:has(b:contains("Team Schedule")) + table table tr') // team roster rows: $('table:has(b:contains("Team Roster")) + table table tr')

我该怎么做?

1 个答案:

答案 0 :(得分:1)

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有一个孩子,即{{1 }}。要让Git声称E有两个孩子BE,您必须同时从C F开始这样Dgit 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 last 提交,但也有多个子级。不幸的是,此处F的输出仍然不是非常有用。为了快速完成这项工作,您可能需要编写自己的图形阅读器,在这种情况下,您可以进行自己的内部标记,并且可以仅使用git rev-list或类似方法。

(在Mercurial中,这项工作要容易得多,尽管即使在那里也可能是不平凡的。)