查找被作者还原的提交

Finding commits that were reverted by an author

该主题主要涵盖它,但为了避免任何歧义 - 我有兴趣审计特定开发人员恢复提交的频率(谁进行恢复并不重要)。我似乎找不到任何搜索(我的 google-fu 在这里让我失望)。

例如,考虑这个提交历史:

* 76b203f "gddc" 37 seconds ago (HEAD -> master)
| Revert "file 1 added"
* 6da3eea "gddc" 52 seconds ago
| file2 added
* c940460 "gddc" 61 seconds ago
  file 1 added

乍一看很容易看出我已经在此处还原了提交 1,但我想要一种编程方式来针对任何作者的任何存储库审核它。

请务必注意,git 不会记录任何类型的 "this commit reverts that commit" 元数据。虽然 git 建议 一个默认的提交消息,即 "This reverts commit ...",但没有什么可以阻止某人更改该消息。只要您确信人们正在维护默认消息,您就会发现还原提交正在执行类似...

git log --grep reverts

这会给你这样的输出:

commit 563a99c7bd36998afb7a1957eaf29b0966402a77 (HEAD -> master)
Author: Example User <user@example.com>
Date:   Mon Jan 15 14:35:36 2018 -0500

    Revert "first"

    This reverts commit 131e6f65c9a78c5476921b6c2f8632661a2d71b6.

您需要生成还原的提交 ID 列表。您可以将该输出通过管道传输到 awk,如下所示:

git log --grep reverts | awk '/This reverts commit/ {print }' | cut -f1 -d.

这会为您提供提交 ID 列表:

131e6f65c9a78c5476921b6c2f8632661a2d71b6

您可以将该列表输入 xargs 以查找有关原始提交的信息,例如:

git log --grep reverts | 
  awk '/This reverts commit/ {print }' | cut -f1 -d. |
  xargs -iCID git show --quiet --format='%ae' CID

上面使用 %ae 从每个还原的提交中提取作者电子邮件,例如:

new_dev@example.com

您可以将参数修改为 --format 以输出有关原始提交的其他信息。

这是否为您指明了正确的方向?