代码之家  ›  专栏  ›  技术社区  ›  Fua

如何从合并中获取所有提交散列?按时间戳对齐的合并提交

  •  0
  • Fua  · 技术社区  · 5 年前

    我正在尝试获取从合并中传入的所有提交散列。我的最终目标是获取这些提交者的电子邮件,并在合并破坏构建时向他们发送电子邮件。但是,我不知道如何解决这个问题。这需要完全在终端完成,因为它将由詹金斯自动化。

    我尝试过的一种方法可能是在合并提交和添加到master的最后一个提交之间找到提交。然而,很显然,这些似乎是由时间戳组成的。

    我正在使用这个来查找合并提交哈希(和电子邮件)

    git log -1 --merges -pretty=format:%H
    git log -1 --merges -pretty=format%ae
    

    预期的结果是,我应该得到所有提交的散列,并且能够找到这些提交者的电子邮件地址。

    0 回复  |  直到 5 年前
        1
  •  0
  •   VonC    5 年前

    如果有合并提交,请先尝试:

    git log --pretty=format:\"%%H\" M~...M
    

    它将列出从M~或M可以到达但从M~和M都不能到达的所有提交。

    这将是对M的第二个父节点所做的所有提交。
    下面是: M-x-x .

    M
    | \
    M~ \
    |   x
    m   |
    |   x
    m   /
    |  /
    o  
    
        2
  •  0
  •   torek    5 年前

    我正在尝试获取从合并中传入的所有提交散列。

    假设您正在提交其哈希值为 H 在树枝的尖端 mainline ,而您将要执行命令:

    git merge feature
    

    feature 不是从 干线

    ...--o--*--o--o--H   <-- mainline
             \
              E--F----G   <-- feature
    

    此合并将引入的提交列表实际上没有 变化 F 只是直接还原 E G 真正重要的只是那些列举的:

    git log mainline..feature
    

    您可能需要控制枚举的顺序。见下文,在下一个引用位之后。

    请注意 合并,你有:

    ...--o--*--o--o--H--M   <-- mainline
             \         /
              E--F----G   <-- feature
    

    提交的承诺是 M^1..M^2 . (这假设一个简单的两个提示合并,结果是一个真正的合并提交。八达通合并是可枚举的,但需要更奇特的语法,快速向前合并不记录 而且事后分析也有问题。)

    我尝试过的一种方法可能是在合并提交和添加到master的最后一个提交之间找到提交。然而,很显然,这些似乎是由时间戳组成的。

    git log 命令使用优先级队列遍历提交图。您的“按时间戳划分网格”观察是由于队列中项目的优先级造成的。您可能只想控制这个优先级,可能是 --topo-order .

    整个循环的结构如下:

    • 插入服从命令行否定,例如。, --not foo 从指定的提交中排除所有可访问的提交 foo 包括提交 本身。(这会影响下一点的初始化和下面的迭代。)

    • 将通过将命令行上直接/肯定提到的所有提交插入为起点来初始化队列。如果没有提到提交,请插入 HEAD . (“肯定的”这里指的是 B ^A B A . 所以 A..B 从中排除可访问的提交 ,就像 --not A

    • 现在,当队列非空时, git日志 跑:

      • 从队列中移除前提交并使用它。
      • 向队列中插入该提交的任何父级(由任何选定的历史简化或其他选项(包括父级重写)修改),这些父级不在队列中且尚未被访问。

    一旦队列为空,整个进程将退出。

    如果合并hasby定义有两个或更多父提交,则 一步一步 横移 开始

    这个 优先级是按提交者日期,较高的值(较后的日期)移动到队列的前面。然而:

    • --date-order 确保孩子们比父母先来。否则与默认值相同。

    • --author-date-order 使用作者日期而不是提交者日期,否则与 --日期顺序 (家长们出来了 他们所有的后代)。

    • 避免交叉合并的分支。

    the git log documentation 详细情况。请注意 --graph --拓扑序