是否可以获取指导A的后代(即B的直接祖先)的修订列表?我尝试git log A..B
我会得到B的祖先的修订列表,这些修订不在A的历史中,这也不是我想要的。我只需要直接连接A和B的修订版本即可。
答案 0 :(得分:1)
是:将--ancestry-path
添加到您的修订规范中。 (这适用于使用commit-graph-walking的任何命令,包括git log
和git rev-list
。)但是我会注意到,我不确定这里的形容词“直接”是什么意思。 / p>
请注意,A..B
的意思是B ^A
,即使用集合ancestors(B) - ancestors(A)
(此处的减法是集合减法)。添加--ancestry-path
意味着在进行集合减法后(或更准确地说,在构建减去的集合时),Git还将减去不是否定修订版本A
的后代的所有提交。
在内部,Git通过使用称为BOTTOM的标记来标记否定的提交哈希ID(例如A
或A..B
中的B ^A
)来实现此目的。这样的提交被收集到一个“底部列表”中,Git确保每个可能在A..B
范围内的提交 C 作为其祖先之一都具有最低提交。例如,如果使用git rev-list --ancestry-path X ^Y ^Z
,这很重要:提交可以是Y
或 Z
的后代。\
下面是一个示例图形片段,显示了哪些提交被选中(●
)还是未被选中(○
),即使它们在A..B
的范围之内:
...--A--●---●--B--...
\ \ /
○--●--●
请注意,此处未选择提交A
,而选择了提交B
。