查找以给定提交的 SHA1 结尾的分支,而不是在本地获取分支

Finding what Branch ends with a given commit's SHA1, while not fetching branches locally

我正在尝试确定哪个分支是拉取请求的来源。

启动 Jenkins 作业时,我可以访问最后一次提交 SHA1 的拉取请求。 从那里我需要知道哪个分支具有相同的提交 SHA1。

由于在作业期间并非所有分支都被提取,我想保持这种状态。

我的问题是:

如何获取以给定提交的 SHA1 结尾的远程分支的名称?

您可以通过

找到它
 git branch --contains <commit>

这将为您提供当地分支机构的列表

 git branch -r --contains <commit>

这会给你一个远程跟踪分支列表

如果您的 Git 足够新(2.7.0 或更高版本),请使用 git branch --points-at。除非你有一个镜像克隆,否则你也需要在这里使用 -r 来查看远程跟踪名称而不是 b运行ch 名称。您还需要 git fetch 所有姓名。如果您担心这将带来的提交和其他对象的数量,您可以使用浅提取。

请注意,如果自拉取请求以来添加了新的提交,这将无济于事,这样名称现在指向提交,在提交时,只是在未来。它也不能消除多个 b运行ch 名称指向 same 提交的情况,这种情况并不少见。

您可以使用从 git ls-remote 溢出的名称和哈希 ID 实现所有这些相同的事情,但这需要编写一些代码,而不仅仅是使用 git branch --points-at。 运行 git ls-remote 查看它打印的内容(它所做的只是打印一些其他 Git 的引用和哈希 ID,这是通过 git fetch 的第一步获得的如果你 运行 git fetch).

最终,你得到的任何答案充其量都是可疑的。这可能是您想要实现的目标的错误方法。