繁体   English   中英

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

[英]How to list branches that contain a given commit?

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

git-branch 手册页

 git branch --contains <commit>

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


 git branch -r --contains <commit>

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


正如Carl Walsh指出的,这仅适用于默认的 refspec

fetch = +refs/heads/*:refs/remotes/origin/*

如果您需要包含其他 ref 命名空间( pull requestGerrit等),您需要添加新的 refspec,然后再次获取:

git config --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*"
git fetch
git branch -r --contains <commit>

另请参阅此git 就绪文章。

--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

git branch -r --contains <commit>的答案适用于普通的远程分支,但如果提交仅在GitHub 为 PRs 创建的隐藏head命名空间中,您将需要更多步骤。

比如说,如果 PR #42 来自已删除的分支,并且该 PR 线程只有对 repo 上提交的引用,则git branch -r不知道 PR #42,因为像refs/pull/42/head这样的refs/pull/42/head不是默认情况下列为远程分支。

.git/config[remote "origin"]部分添加一个新行:

fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

这个要点有更多的上下文。)

然后当你git fetch你会得到所有的 PR 分支,当你运行git branch -r --contains <commit>你会看到origin/pr/42包含提交。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM