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

问题描述 投票:1回答:2

我正在尝试获取来自合并的所有提交哈希。我的最终目标是获取这些提交者的电子邮件,并在合并破坏构建的情况下向他们发送电子邮件。但是,我不确定如何解决此问题。这需要完全在终端中完成,因为它将由詹金斯(Jenkins)自动化。

我尝试过的一种方法可能是在合并提交和最后一次添加到master的提交之间找到提交。但是,显然,这些似乎是通过时间戳进行划分的。

我想过的另一种方法是找到已合并到master的分支,然后将所有哈希值放在那里。但是,我不知道执行此操作的命令。

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

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

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

git email jenkins version-control blame
2个回答
0
投票

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

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

将列出所有可从M〜或M到达但不能同时从M〜和M到达的提交。

这就是对M的第二个父级所做的所有提交。在下面:M-x-x

M
| \
M~ \
|   x
m   |
|   x
m   /
|  /
o  

0
投票

我正在尝试获取来自合并的所有提交哈希。

如果您控制是否执行合并,那么您将处于理想状态,因为您可以轻松枚举合并之后将可到达的提交,而合并开始之前当前将无法访问这些提交。 (由于合并不会更改图形的较早部分,因此合并后您仍然可以获得相同的结果。)

假设您正在提交中,其散列为H,位于分支mainline的顶端,并且您将(但尚未)发出命令:

git merge feature

feature引入尚未从mainline引入的提交,如:

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

此合并将带来的提交列表-确实不如将合并的changes有趣,因为例如F可能只是E的直接还原)因此只有commit G才是真正重要的-只是那些枚举者:

git log mainline..feature

您可能希望控制枚举的顺序。在下引号之后,请参见下文。

请注意,在合并后,您具有:...--o--*--o--o--H--M <-- mainline \ / E--F----G <-- feature

和引入的提交是M^1..M^2枚举的那些。 (这假设一个简单的两技巧合并会导致真正的合并提交。八达通合并是可枚举的,但需要更高级的语法,而快进合并不会记录mainline的前一技巧,并且在分析之后很麻烦-事实。]

我尝试过的一种方法可能是在合并提交和最后一次添加到master的提交之间找到提交。但是,显然,这些似乎是通过时间戳进行划分的。

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

整个循环是这样构造的:

  • [All

    插入服从命令行否定符,例如,--not foofoo指定的提交中排除所有可到达的提交,包括提交foo本身。 (这会影响下一点的初始化和下面的迭代。)
  • git log将通过在命令行中直接/肯定地插入所有提及的提交作为起点来初始化队列。如果未提及提交,则插入HEAD。 (这里的“肯定”是指B ^AB的正引用和对A的负引用。因此A..BA一样,从--not A中排除了可达到的提交。 )
  • 现在,当队列为非空时,git log运行:
    • 从队列中删除前端提交并使用它。
    • [通过队列中没有但尚未访问的,通过任何选定的“历史简化”或其他选项(包括父级重写)修改的那个提交的任何父级插入队列,
  • 队列为空后,退出整个过程。

    根据定义,鉴于合并具有两个或多个父提交,因此

    遍历

    合并的任何git log步骤都有可能将两个或多个提交插入队列。当然,队列中也可以start包含两个或多个提交。每当队列does具有两个或多个提交时,优先级决定哪个提交位于队列中的哪个位置。<< [default优先级是按提交者日期确定的,较高的值(较晚的日期)移到队列的最前面。但是:

      --date-order确保孩子先于父母。否则,它与默认值相同。

  • [--author-date-order使用作者日期而不是提交者日期,否则与--date-order相同(父母在所有子女后代中出名)。

  • [--topo-order避免交错合并的分支。

  • 有关详细信息,请参见the git log documentation。请注意,git log表示--graph
    © www.soinside.com 2019 - 2024. All rights reserved.