在合并到母版中之后找到开发人员分支

时间:2019-03-13 21:41:35

标签: git

问题-将所有开发人员合并到master后,找到所有分支。扩展名-对标记X和Y之间的所有修订都执行此操作。

X-----A----B---C---D---E----Y
       \              /
        F------G-----H

使用git CLI,如何查找(A,F)和(E,H)对?

1 个答案:

答案 0 :(得分:0)

(如果用“分支”来表示分支名称,则不能:该信息已消失。)

假设您要查找 commits ,则很容易找到E,因此也很容易找到DHgit rev-list --min-parents=2 <endpoint>枚举具有以下内容的提交两个或两个以上的父母。 --min-parents=2可以拼写为--merges。给定提交E,您可以查看其父级,或者让git rev-list吐出具有合并哈希值的同一行上的父哈希值,并为您提供D和{{ 1}}。

查找HA更困难,但也可能出错:

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语法一起使用,以枚举那些符合以下条件的提交:

  1. 是Y的祖先(包括Y本身);但是
  2. 不是X的祖先(因此不包括X本身);和
  3. 以X为祖先,即X的后代

常规X..Y的提交仅满足条件1和2,这意味着在这样的图形中:

X..Y

您将获得所有已加星标的提交。添加 o--o <-- X / \ ...--o--o--*---*--* <-- Y 会删除最左边的加星标提交,因为它不是提交--ancestry-path的后代(尽管X实际上不是通过测试“是X的提交后代”而是“是X “提交的祖先” —连接DAG中节点的弧线都向后指向,因此is-ancestor是一个简单的测试,而is-descendant则很难)。