首页 > 解决方案 > 合并到 master 后查找开发人员分支

问题描述

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

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

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

标签: git

解决方案


(如果“分支”是指分支名称,则不能:该信息已消失。)

假设您的意思是找到提交,很容易找到E,因此也很容易Dand H:git rev-list --min-parents=2 <endpoint>枚举两个或更多父母的提交。 --min-parents=2可以拼写--merges。给定 commit E,您可以查看它的父级,或者git rev-list在具有合并哈希的同一行上吐出父级哈希,为您提供D和的哈希 ID H

查找AandF更困难,但也可能是错误的:

...--o--x--...--x----...----M--o
         \       \         /
          *--...--*--...--o

两个加星标的提交都回到了 的第一父分支血统M,因此两者都是潜在的兴趣点。

我不确定是否可以git rev-list在这里识别两个加星标的提交。请注意,在这种图中,除了其中一个之外,所有这些都是合并,但我们也可以有:

...--o--x----...----W--...--M--o
         \         /       /
          *--...--*--...--o

whereW也是一个合并,这次是在来自 的第一父行M上,它从底部的第二父行引入提交。

所有合并将来自rev-list其输出限制为--merges. 添加--first-parent以避免遍历第二条腿。

您可以使用git rev-list --parents生成构建图形所需的数据,然后编写自己的图形处理算法,以选择您喜欢的任何内容。请注意,git rev-list它也可以与枚举那些提交--ancestry-path的语法一起使用:X..Y

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

法线X..Y只为您提供满足条件一和条件二的提交,这意味着在这样的图中:

          o--o   <-- X
         /    \
...--o--o--*---*--*   <-- Y

你得到所有加星标的提交。添加--ancestry-path剔除最左边的星号提交,因为它不是提交的后代X(尽管git rev-list实际上不是通过测试“是 X 的提交后代”而是“X 是提交的祖先”来确定这一点 - 连接 DAG 中节点的弧线所有的点都向后,所以 is-ancestor 是一个简单的测试,而 is-descendant 是困难的)。


推荐阅读