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