问题-将所有开发人员合并到master后,找到所有分支。扩展名-对标记X和Y之间的所有修订都执行此操作。
X-----A----B---C---D---E----Y
\ /
F------G-----H
使用git CLI,如何查找(A,F)和(E,H)对?
答案 0 :(得分:0)
(如果用“分支”来表示分支名称,则不能:该信息已消失。)
假设您要查找 commits ,则很容易找到E
,因此也很容易找到D
和H
:git rev-list --min-parents=2 <endpoint>
枚举具有以下内容的提交两个或两个以上的父母。 --min-parents=2
可以拼写为--merges
。给定提交E
,您可以查看其父级,或者让git rev-list
吐出具有合并哈希值的同一行上的父哈希值,并为您提供D
和{{ 1}}。
查找H
和A
更困难,但也可能出错:
F
两个加星标的提交都引回...--o--x--...--x----...----M--o
\ \ /
*--...--*--...--o
的第一对父辈血统,因此两者都是潜在的兴趣点。
我不确定是否可以通过M
来在此处标识两个已加星标的提交。请注意,在这种图形中,除其中一个以外的所有图都是合并,但我们也可以有:
git rev-list
这里...--o--x----...----W--...--M--o
\ / /
*--...--*--...--o
也是一个合并,这次是在W
的第一父级行上,它从第二父级行开始穿过底部提交。
所有合并都将来自M
,其输出限于rev-list
。添加--merges
以避免横穿第二条腿。
您可以使用--first-parent
生成构建图所需的数据,然后编写自己的图处理算法以选择所需的任何内容。请注意,git rev-list --parents
也可以与git rev-list
和--ancestry-path
语法一起使用,以枚举那些符合以下条件的提交:
常规X..Y
的提交仅满足条件1和2,这意味着在这样的图形中:
X..Y
您将获得所有已加星标的提交。添加 o--o <-- X
/ \
...--o--o--*---*--* <-- Y
会删除最左边的加星标提交,因为它不是提交--ancestry-path
的后代(尽管X
实际上不是通过测试“是X的提交后代”而是“是X “提交的祖先” —连接DAG中节点的弧线都向后指向,因此is-ancestor是一个简单的测试,而is-descendant则很难)。