你如何查找谁将一个git提交合并到分支中?

12

我们的git代码库中有一个文件,我想找出是谁将其合并到一个分支中。

我有一个标识了引入该文件的提交的哈希值(假设为552a976f1a25f9bad57efb9455e951f6b7b3367f),并且我知道该文件位于staging分支上。

如何找到将上述提交合并到staging分支的提交哈希值?我想找到合并人员和合并日期。


这是一个实际合并吗(而不是快进式合并)?你不能只用 git log path/to/the/file(或 gitk)吗? - svick
git log 显示了提交文件的人员姓名,我想找到将该提交合并到暂存分支的人员。 - Marc O'Morain
4个回答

3
git log <commit-id>..<branch> --ancestry-path --merges --reverse

以下是您感兴趣的<commit-id>后发生的合并列表和<branch>当前状态。根据您的合并工作流程,您感兴趣的合并可能是列表中的第一个或下一个之一。

使用可视化工具可以更好地展示相关历史记录的部分内容。

git log --oneline --graph --decorate --ancestry-path --boundary <commit-id>..<branch>

在图表底部寻找您的<commit-id>(它将属于“图形边界” - 标有o而不是*)。

2
如果我理解正确,您有C5,并正在寻找C6。如果是这种情况,您可能在寻找以下内容:
git rev-list --merges HEAD --not <hash> --reverse

这将为您提供在您的哈希提交之后发生的合并提交列表。在此命令中,我使用HEAD,因为我相信您正在master(示例中)或staging(您的情况下)上。

在不太复杂的环境中,您可能正在寻找在您提交之后发生的第一个合并提交... 但如果您没有这种机会,您可以尝试:

git log --graph --decorate HEAD...<hash>^

或者使用任何图形工具来探索您的历史记录(例如 gitk)...

1
git log -1 --merges <hash>

将显示自<hash>提交以来(包括本身)最近的合并提交日志。


1
这是一个相当不错的解决方案,有时合并可能是第一次合并,但并非总是如此。在我的情况下,我感兴趣的是第二次合并。 - Marc O'Morain
2
git log <hash>会显示在<hash>之前的提交,而不是之后(即它将显示<hash>的祖先)。因此,此命令将显示您的提交之前的最后一次合并,而不是将其带入主分支的合并。 - Jan Warchoł

0

在您的目标分支中,如果所有合并提交都有来自目标分支的提交作为第一个父提交,则可以使用git-when-merged。这将在使用“标准”Git工作流程(例如使用CI进行合并)时发生。

用法:

git-when-merged <commit> <target branch>

git-when-merged 的工作方式是(引用文档):查找每个分支的第一个父历史记录中包含 COMMIT 作为祖先的最旧提交。

我的理解是,这将返回 Jan Warchoł 的回答中命令给出的第一个结果。 - Gabriel Devillers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接