【问题标题】:Finding developers branches after they had been merged into master合并到 master 后查找开发人员分支
【发布时间】:2019-03-13 21:41:34
【问题描述】:

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

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

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

【问题讨论】:

标签: git


【解决方案1】:

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

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

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

...--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-pathX..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 是困难的)。

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2016-10-03
    • 2021-12-29
    • 2013-01-14
    相关资源
    最近更新 更多