git - 获取连接到 B 的 A 的直接后代
git - get direct descendants of A that connect to B
是否可以获取 A 的直接后代是 B 的直接祖先的修订列表?我我尝试 git log A..B
我将获得 B 的祖先版本的修订列表,这些版本不在 A 的历史记录中,这不是我想要的。我只需要直接连接 A 和 B 的修订。
是:将 --ancestry-path
添加到您的修订规范中。 (这适用于任何使用 commit-graph-walking 的命令,包括 git log
和 git rev-list
。)但我会指出,我不确定你在这里所说的形容词 "direct" 是什么意思.
注意A..B
表示B ^A
,即使用集合ancestors(B) - ancestors(A)
(这里的减法是集合-减法)。添加 --ancestry-path
意味着在进行集合减法之后(或者更准确地说,在构造减去的集合时),Git 也会减去任何不是否定修订 A
的后代的提交。
在内部,Git 通过使用名为 BOTTOM 的标志标记否定的提交哈希 ID(如 A..B
或 B ^A
中的 A
)来做到这一点。这样的提交被收集到 "bottom list" 和 Git 中确保每个可能在 A..B
范围内的提交 C 都有一个底部提交作为它的祖先之一。例如,如果您使用 git rev-list --ancestry-path X ^Y ^Z
,这很重要:提交可以是 Y
或 Z
.\
的后代
这是一个示例图片段,显示哪些提交被选中 (●
) 或未被选中 (○
),即使它们是 A..B
的 "in the range":
...--A--●---●--B--...
\ \ /
○--●--●
注意commitA
没有被选中,这里commitB
被选中
是否可以获取 A 的直接后代是 B 的直接祖先的修订列表?我我尝试 git log A..B
我将获得 B 的祖先版本的修订列表,这些版本不在 A 的历史记录中,这不是我想要的。我只需要直接连接 A 和 B 的修订。
是:将 --ancestry-path
添加到您的修订规范中。 (这适用于任何使用 commit-graph-walking 的命令,包括 git log
和 git rev-list
。)但我会指出,我不确定你在这里所说的形容词 "direct" 是什么意思.
注意A..B
表示B ^A
,即使用集合ancestors(B) - ancestors(A)
(这里的减法是集合-减法)。添加 --ancestry-path
意味着在进行集合减法之后(或者更准确地说,在构造减去的集合时),Git 也会减去任何不是否定修订 A
的后代的提交。
在内部,Git 通过使用名为 BOTTOM 的标志标记否定的提交哈希 ID(如 A..B
或 B ^A
中的 A
)来做到这一点。这样的提交被收集到 "bottom list" 和 Git 中确保每个可能在 A..B
范围内的提交 C 都有一个底部提交作为它的祖先之一。例如,如果您使用 git rev-list --ancestry-path X ^Y ^Z
,这很重要:提交可以是 Y
或 Z
.\
这是一个示例图片段,显示哪些提交被选中 (●
) 或未被选中 (○
),即使它们是 A..B
的 "in the range":
...--A--●---●--B--...
\ \ /
○--●--●
注意commitA
没有被选中,这里commitB
被选中