如何查询git以找出哪些分支包含给定的提交? gitk通常会列出分支,除非有太多分支,在这种情况下它只是说“很多(38)”或类似的东西。我需要知道完整列表,或者至少是否某些分支包含提交。
答案 0 :(得分:1320)
git branch --contains <commit>
仅列出包含指定提交的分支(如果未指定,则为HEAD)。意为
--list
。
git branch -r --contains <commit>
列出 remote tracking branches (如下面user3941992的answer中所述),即“与远程分支有直接关系的本地分支” ”
另请参阅此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
包含提交。