获取连接到 B 的 A 的直系后代



是否有可能获得 A 的直系后代是 B 直系祖先的修订列表?我尝试git log A..B我会得到 B 的祖先不在 A 历史中的修订列表,这不是我想要的。我只需要直接连接 A 和 B 的修订。

是:将--ancestry-path添加到修订规范中。 (这适用于任何使用提交图遍历的命令,包括git loggit rev-list。 但我要指出的是,我不确定你在这里所说的形容词"直接"是什么意思。

注意A..B的意思是B ^A,即使用集合ancestors(B) - ancestors(A)(这里的减法是集合减法(。 加--ancestry-path意味着在做集合减法后(或者更准确地说,在构造减去的集合时(,Git 还会减去任何不是否定修订A后代的提交。

在内部,Git 通过使用名为 BOTTOM 的标志标记否定的提交哈希 ID(如A..BB ^A中的A(来实现这一点。 此类提交被收集到"底部列表"中,Git 确保每个可能在A..B范围内的提交C都有一个底部提交作为其祖先之一。 例如,如果您使用git rev-list --ancestry-path X ^Y ^Z,这很重要:提交可以是YZ的后代。


下面是一个示例图形片段,显示了哪些提交被选中((或未选择((,即使它们在A..B的"范围内":

...--A--●---●--B--...
      /
○--●--●

请注意,此处未选择提交A,而是选择了提交B

最新更新