我如何查询git找出哪些分支包含给定的提交?Gitk通常会列出分支,除非分支太多,在这种情况下,它只会说“许多(38)”或类似的东西。我需要知道完整的列表,或者至少某些分支是否包含提交。
当前回答
你可以跑:
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
其他回答
git分支的答案-r——contains <commit>适用于普通的远程分支,但如果提交只是在GitHub为PRs创建的隐藏头部名称空间中,您将需要更多的步骤。
比如说,如果PR #42来自已删除的分支,而PR线程只有一个对repo上的提交的引用,git分支-r不知道PR #42,因为像refs/pull/42/head这样的引用默认情况下不会被列为远程分支。
在.git/config中为[remote "origin"]部分添加新行:
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
(这个要点有更多的背景。)
然后当你git取回你会得到所有的PR分支,当你运行git branch -r——contains <commit>你会看到origin/ PR /42包含提交。
从git-branch手册页:
git branch --contains <commit>
只列出包含指定提交的分支(如果没有指定HEAD)。意味着——列表。
git branch -r --contains <commit>
还列出了远程跟踪分支(如下面user3941992的回答中提到的),即“与远程分支有直接关系的本地分支”。
正如Carl Walsh所指出的,这只适用于默认的refspec
fetch = +refs/heads/*:refs/remotes/origin/*
如果你需要包含其他ref命名空间(pull request, Gerrit,…),你需要添加新的refspec,并再次获取:
git config --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*"
git fetch
git branch -r --contains <commit>
参见这篇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
注意:如果提交是在远程跟踪分支上,添加-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
推荐文章
- GitHub -致命:无法读取用户名https://github.com':没有这样的文件或目录
- 撤消git平分错误
- 使用.gitconfig配置diff工具
- 如何配置Mac OS X术语,使git有颜色?
- Visual Studio Code: .git文件夹/文件隐藏
- “node_modules”文件夹应该包含在git存储库中吗
- 为什么git-rebase给了我合并冲突,而我所做的只是压缩提交?
- 当我试图推到原点时,为什么Git告诉我“没有这样的远程‘原点’”?
- 如何从远程分支中挑选?
- 如何查看一个分支中的哪些提交不在另一个分支中?
- 如何取消在github上的拉请求?
- HEAD和master的区别
- GIT克隆在windows中跨本地文件系统回购
- RPC失败;卷度传输已关闭,剩余未完成的读取数据
- 我应该在.gitignore文件中添加Django迁移文件吗?