代码之家  ›  专栏  ›  技术社区  ›  Andrew Arnott Rick Strahl

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

  •  944
  • Andrew Arnott Rick Strahl  · 技术社区  · 15 年前

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

    2 回复  |  直到 15 年前
        1
  •  1273
  •   Gerold Broser    7 年前

    git-branch manual page :

     git branch --contains <commit>
    

    仅列出包含指定提交的分支(如果未指定,则返回head)。暗示 --list .


     git branch -r --contains <commit>
    

    列表 remote tracking branches 以及(如中所述 user3941992 answer 即“与远程分支有直接关系的本地分支”。


    也见此 git ready 文章。

    这个 --contains 标签将确定某个提交是否已经引入到您的分支中。也许您已经从一个您认为已应用的补丁中获得了一个commit 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 选项 .
    (AS) MichielB 评论 below )

    git branch -a --contains <commit>
    

    MatrixFrog 注释,它只显示包含该内容的分支 准确的 承诺。
    如果您想知道哪些分支包含“等效”提交(即哪些分支选择了该提交),那么 git cherry :

    因为 吉特樱桃 比较变更集而不是提交ID(sha1) ,您可以使用 吉特樱桃 确定您在本地所做的提交是否已应用 <upstream> 在另一个提交ID下。
    例如,如果重新输入补丁,就会发生这种情况。 <上游> 通过电子邮件而不是直接推送或拉送提交。

               __*__*__*__*__> <upstream>
              /
    fork-point
              \__+__+__-__+__+__-__+__> <head>
    

    (在这里,承诺标记为' - “不会出现在 吉特樱桃 ,表示它们已经存在于 <上游& GT; 。)

        2
  •  15
  •   Eugen Konkov    8 年前

    你可以跑:

    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