协慌网

登录 贡献 社区

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

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

答案

git-branch 手册页

git branch --contains <commit>

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


git branch -r --contains <commit>

列出远程跟踪分支 (如下面的user3941992回答中所述),即 “与远程分支有直接关系的本地分支”。


另见git ready文章。

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

$ git log -1 tests
commit d590f2ac0635ec0053c4a7377bd929943d475297
Author: Nick Quaranto <[email protected]>
Date:   Wed Apr 1 20:38:59 2009 -0400

    Green all around, finally.

$ git branch --contains d590f2
  tests
* master

注意: 如果提交位于远程跟踪分支上 ,请添加-a选项
(正如MichielB 在下面评论)

git branch -a --contains <commit>

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

因为git cherry 比较变更集而不是提交 id(sha1) ,所以你可以使用git cherry来查明你在本地提交的提交是否已经在不同的提交 id 下应用<upstream>
例如,如果您通过电子邮件提供补丁<upstream>而不是直接推送或提取提交,则会发生这种情况。

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

(这里,标记为 ' - ' 的提交不会显示git cherry ,这意味着它们已经存在于<upstream> 。)

你可以运行:

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