如何在 Git 中获得最后一次从 develop 到 master 的合并?

How do I get the last merge from develop into master in Git?

为了自动化我的 CI,我需要获取从 develop 分支执行的最后一次合并的信息到 master 分支(或更一般地,从给定的源分支到给定的目标分支)。 我试过

git log --oneline --merges  master -20

但是这让我得到了所有最后 20 个合并到 master 的列表,没有按源分支区分(让我有繁琐的任务来解析和推断源分支评论)。 是否有直接从命令行按源分支过滤的干净而可靠的方法?

注意:我不需要有关CI或分支机构管理最佳实践的建议。我们在内部使用 GitFlow 工作流 (https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow),因此一切 repository/CI-related 都已经处于完美状态(从方法论上讲)。我只需要 非常具体非常具体 问题的回答,谢谢!

Is there a way to filter by source branch directly from the command line?

没有。 Git 中的分支只是标签。合并不记得它们被合并到哪个分支或从哪个分支合并,它们只记住它们的父提交和提交消息。一旦合并,两个历史都同样是分支的一部分。

这些是同一存储库的不同视图。

      < C <-- D <---- I [develop]
     /         \     /
A < B < E < F < G < H [master]

              <------ I [develop]
             /       /
A < B < C < D < G < H [master]
     \         /
      E <--- F

除了 I 之外的所有提交都是 master 分支的一部分(即它们可以从 H 到达)。所有提交都是 develop 分支的一部分(即它们可以从 I 到达)。 G 是来自 develop 的合并还是来自不相关的分支?拓扑上没法说。

你能做的最好是希望尝试从合并提交消息和历史中推断出信息。如果您的合并提交消息是一致的,您也许可以摆脱这样的情况,但它很脆弱。

git log --oneline --merges <destination> | grep "Merge branch '<source>'"

我建议创建一个特殊的日志,下一个要点有一个很棒的日志来查看不同的分支、用户和提交时间

https://gist.github.com/gollum23/bbb115977677b60eea97