如何找到特定提交的分支?

Posted

技术标签:

【中文标题】如何找到特定提交的分支?【英文标题】:How do I find what branch a particular commit was made to? 【发布时间】:2022-01-13 14:02:55 【问题描述】:

我们有一个包含许多开发人员的相当大的 git 存储库,我被要求调查一个特定的更改是如何进入我们的主分支的。因为分支只是对提交的引用,并且这些引用会随着时间的推移而移动,所以我不知道如何确定开发人员在进行特定提交时所在的分支。鉴于提交不“属于”任何特定的分支,如何做到这一点?有没有可能?

【问题讨论】:

这最终将取决于您的工作流程,正如您已经提到的,git 本身不存储任何分支元数据。一些工作流程包括使用本地挂钩来自动添加分支名称以提交消息。可能是获取您信息的一种方式,但这不是追溯性的,您将无法及时阅读。 你怀疑这个分支还存在吗?而且,你为什么想知道这个 - 分支名称对你有帮助吗?旁注,如果您使用 PR,您的 SCM 工具可能能够查看过去完成的 PR 的历史,以找到引入它的 PR,并且通常会告诉您当时的分支名称。 你为什么在乎?假设我在我命名为frink 的分支上进行了提交,然后我将其重命名为monty。这个提交和我后来直接在分支名称flanders 上进行的提交有什么区别,然后我将其重命名为frink,这是你看到的那个? 我很在意,因为我需要知道开发人员在进行特定提交时在哪个分支上工作。有很多分支和合并正在进行,有时我们需要确定特定更改如何在主分支中结束。我们可以调查并找出是什么提交引入了更改,但不知道当时它在哪个分支上。这会将整个分支历史变成一个无用的提交图,无法进行有意义的分析。这似乎应该是任何源代码控制系统的基础。 这能回答你的问题吗? Finding what branch a Git commit came from 【参考方案1】:

您可以通过git branch --contains <commit> 列出包含特定提交的所有分支。如果它是一个较旧的提交,这可能并不总是有用的,因为任何与最初进行提交的分支不同的分支也将包含它。以下是该命令的使用示例:

您还可以做的另一件事是列出自该提交以来所做的所有合并提交:

您可能可以通过比较此提交所在的分支以及自此提交后合并到 main 中的分支来了解提交的来源

【讨论】:

这很有帮助,但仍然没有向我显示完整的分支历史记录。我需要回答诸如“ 的主分支在哪里? 之类的问题 哦。这和你问的不一样。您可以使用 git log 通过过滤特定日期来做到这一点。例如,要获取 10 月 9 日的所有提交,您可以运行 git log --until 10/9/2021,它将列出从 10 月 9 日开始的提交

以上是关于如何找到特定提交的分支?的主要内容,如果未能解决你的问题,请参考以下文章

Git 如何从特定的提交中创建一个新的分支

如何使用 JGit 找到提交的分支?

如何找到提交给 git 分支的文件列表?

找到特定提交和结帐的分支

如何从已经重新定位的分支中删除特定的提交?

pygithub如何获取特定分支的最新提交