繁体   English   中英

有没有办法获取 git commit 节点的子节点数?

[英]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有两个孩子, EC ,您必须从FD开始,以便git rev-listD返回到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM