git-获取连接到B的A的直接后代

时间:2018-09-22 19:05:53

标签: git ancestor

是否可以获取指导A的后代(即B的直接祖先)的修订列表?我尝试git log A..B我会得到B的祖先的修订列表,这些修订不在A的历史中,这也不是我想要的。我只需要直接连接A和B的修订版本即可。

1 个答案:

答案 0 :(得分:1)

是:将--ancestry-path添加到您的修订规范中。 (这适用于使用commit-graph-walking的任何命令,包括git loggit rev-list。)但是我会注意到,我不确定这里的形容词“直接”是什么意思。 / p>

请注意,A..B的意思是B ^A,即使用集合ancestors(B) - ancestors(A)(此处的减法是集合减法)。添加--ancestry-path意味着在进行集合减法后(或更准确地说,在构建减去的集合时),Git还将减去不是否定修订版本A的后代的所有提交。

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


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

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

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