如何在 git2go (libgit2) 中列出包含给定提交的分支?

How to list branches that contain a given commit in git2go (libgit2)?

给定一个特定的引用(在本例中是一个标记),您如何列出包含 git2go 中该提交的分支?类似于 git branch --contains <commit>.

这里的问题,从图上看是 "how do I know if A is an ancestor of B?"(对你想成为 B 的每个分支重复几次)。回答这个问题的唯一方法是从 B 开始沿着历史图走下去,然后检查是否找到 A。

您可以通过几种方式做到这一点,但最有效的方法通常是将问题简化为等价的 "is A a merge-base of A and B?"。你可以通过 Repository.MergeBase() 在 git2go 中问这个问题。这将 return 您提供的两个提交之间的最佳合并基础。在您希望其中一个提交作为合并基础的情况下,这应该始终提供正确的答案,即使它将答案缩减为单个合并基础。