如何列出包含给定提交的分支?

时间:2009-09-14 04:03:11

标签: git version-control

如何查询git以找出哪些分支包含给定的提交? gitk通常会列出分支,除非有太多分支,在这种情况下它只是说“很多(38)”或类似的东西。我需要知道完整列表,或者至少是否某些分支包含提交。

3 个答案:

答案 0 :(得分:1320)

来自git-branch manual page

 git branch --contains <commit>
  

仅列出包含指定提交的分支(如果未指定,则为HEAD)。意为--list


 git branch -r --contains <commit>

列出 remote tracking branches (如下面user3941992answer中所述),即“与远程分支有直接关系的本地分支” ”


另请参阅此git ready文章。

  

--contains标记将确定某个提交是否已进入您的分支。也许你已经从你认为已经应用的补丁中获得了一个提交SHA,或者你只是想检查你最喜欢的开源项目的提交是否已经减少了75%的内存使用量。

$ git log -1 tests
commit d590f2ac0635ec0053c4a7377bd929943d475297
Author: Nick Quaranto <nick@quaran.to>
Date:   Wed Apr 1 20:38:59 2009 -0400

    Green all around, finally.

$ git branch --contains d590f2
  tests
* master

注意:如果提交位于remote tracking branch,请添加-a选项
(以MichielB评论below

git branch -a --contains <commit>

MatrixFrog注释,它只显示哪些分支包含完全提交 如果你想知道哪些分支包含“等效”提交(即哪些分支已经选择了提交),那就是 git cherry

  

由于git cherry 比较变更集而不是提交ID(sha1),因此您可以使用git cherry来确定您是否已在本地进行了提交{{ 1}}在不同的提交ID下   例如,如果您通过电子邮件提供补丁<upstream>而不是直接推送或提取提交,则会发生这种情况。

<upstream>

(此处,标记为“ __*__*__*__*__> <upstream> / fork-point \__+__+__-__+__+__-__+__> <head> ”的提交不会显示-,这意味着它们已存在于git cherry中。)

答案 1 :(得分:17)

你可以跑:

git log <SHA1>..HEAD --ancestry-path --merges

从输出中的最后一次提交的评论中,您可以找到原始分支名称

示例:

       c---e---g--- feature
      /         \
-a---b---d---f---h---j--- master

git log e..master --ancestry-path --merges

commit h
Merge: g f
Author: Eugen Konkov <>
Date:   Sat Oct 1 00:54:18 2016 +0300

    Merge branch 'feature' into master

答案 2 :(得分:2)

对于git branch -r --contains <commit>的答案在普通的远程分支中效果很好,但是如果提交仅在GitHub creates for PRs的隐藏head命名空间中,则您还需要一些步骤。 / p>

说,如果PR#42来自已删除的分支,并且该PR线程具有对回购上的提交的唯一引用,则git branch -r不知道PR#42,因为类似refs/pull/42/head的引用默认情况下未列为远程分支。

.git/config部分的[remote "origin"]中添加新行:

fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

({This gist具有更多上下文。)

然后,当您git fetch时,将获得所有PR分支,而当您运行git branch -r --contains <commit>时,将看到origin/pr/42包含提交。