如何在GitHub上搜索提交消息?

rip*_*234 321 search github

不是在Git仓库中,而是在GitHub中 - 我如何只搜索特定仓库/分支的提交消息?

dsl*_*dsl 203

You used to be able to do this, but Github removed this feature at some point mid-2013. To achieve this locally, you can do:

git log -g --grep=STRING
Run Code Online (Sandbox Code Playgroud)

(Use the -g flag if you want to search other branches and dangling commits.)

-g, --walk-reflogs
    Instead of walking the commit ancestry chain, walk reflog entries from
    the most recent one to older ones. 
Run Code Online (Sandbox Code Playgroud)

  • 为什么他们删除它?这是一个非常有用的功能. (142认同)
  • 提示省略了大多数常见用例的`-g`标志.我没有太多关注这一点,但是使用`-g`,搜索似乎只能回溯一个月.`git log -g --grep = fix`而在repo的`develop`分支中,有两千年的约8000次提交,只能追溯到2月2日. (9认同)

okt*_*pus 133

更新(2017/01/05):
Github发布了一个更新,允许您现在在其UI中的提交消息中进行搜索.有关更多信息,请参阅博客文章


我有同样的问题,昨天联系了某人@Github:

由于他们将搜索引擎切换到ElasticSearch,因此无法使用Github UI搜索提交消息.但该功能是在团队的愿望清单上.

不幸的是,目前还没有该功能的发布日期.

  • 即使他们在Web UI中的高级搜索也不允许搜索最重要的字段 - 实际的提交消息.这绝对是荒谬的IMO.Github一起行动吧! (68认同)
  • 是.忘记这样一个事实,即他们已经构建了一个有助于彻底改变和推广开源软件的Web服务,事实上他们没有这个功能,这使得它完全是假的! (22认同)
  • 感谢您抽出时间在一个易于找到的公共场所用GitHub发布您的话语内容.荒谬的是,这是公众获取此类信息的唯一方式 - GitHub没有公共问题跟踪器是非常愚蠢的 - 但是在这种愚蠢的存在下,你在这里所做的是一种防止数百个问题的有用方法其他人浪费时间在同一个请求中发送.感谢您节省了数百个工时的工作效率. (12认同)
  • +1你在GitHub中为我节省了无用的时间,想知道如何实现我认为显而易见的功能.所以我们现在必须通过命令行将repo本地克隆到grep.Jeez,那是进步啊?!;) (7认同)

var*_*tec 63

截至2017年,它是GitHub本身包含的功能.

他们使用的示例搜索是 repo:torvalds/linux merge:false crypto policy

在此输入图像描述 来自https://github.com/blog/2299-search-commit-messages的 gif

  • 我已经观察了五分钟,但我无法弄清楚鼠标向下和向右缩放后的去向。 (2认同)
  • @KevinKrumwiede 可能是“停止录制”按钮哈哈 (2认同)

小智 57

简短的回答是,您无法直接在github.com网站上搜索提交消息.目前我们建议git grep本线程上的其他人提出本地解决方案.

在某个时间点,GitHub确实git grep为单个存储库提供了一个样式搜索提交消息.不幸的是,这种方法暴露了拒绝服务,可能导致文件服务器无法访问.出于这个原因,我们删除了git grep搜索.

目前的封套估计值使得GitHub中的提交数量大约在800亿大关.虽然谷歌工程师在我们背后嘲笑,但这是存储在ElasticSearch中的相当多的文档.我们很乐意使这个数据集可搜索,但它不是一个简单的项目.

  • +1.这似乎证实了我的想法[我的回答](http://stackoverflow.com/a/28493853/6309):提交消息没有编入索引:你正在使用索引`git diff's'(意思是提交的内容) ,而不是提交元数据) (2认同)

Ric*_* II 45

这已从GitHub中删除.我用:

$git log --all --oneline | grep "search query"
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您也可以按作者过滤:

$git log --all --oneline --author=rickhanlonii | grep "search query"
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用,但最受欢迎的答案却没有. (2认同)

Jon*_*rns 21

搜索代码的帮助页面看来,这似乎还不可能.

您可以在回购中搜索文本,包括选择要搜索的文件或路径的功能,但不能指定要在提交中搜索.

也许向他们提出这个建议

  • 在搜索回购时,这似乎是更"默认"的用例.特别是对于那些通过大量提交来了解新存储库的人.他们应该考虑添加这个. (18认同)

tec*_*rus 19

你可以使用google抓取的repos(结果从repo到repo不同)来做到这一点

搜索所有已爬行存储库的所有分支以获取"更改许可证"

"更改许可证"网站:https://github.com/*/*/commits

搜索所有已爬行存储库的主分支以获取"更改许可证"

"更改许可证"网站:https://github.com/*/*/commits/master

搜索所有已抓取的Twitter回购的主分支以获取"更改许可"

"更改许可证"网站:https://github.com/twitter/*/commits/master

在twitter/some_project repo的所有分支机构中搜索"change license"

"更改许可证"网站:https://github.com/twitter/some_project/commits

  • @DZenBot如果它不是一个公开的回购,那么你可能已经有一个本地副本给git grep,我只是把这个答案给那些不想克隆一个公共回购的人来弄清楚什么时候做了一些改变.我主要使用它来查找删除对旧版gtk版本的支持或许可证更改为gpl3的提交 (4认同)
  • 这只适用于你的回购是公开的:( (3认同)

Von*_*onC 14

20171月更新(两年后):

您现在可以搜索提交消息!(仍然只在主分支中)

https://cloud.githubusercontent.com/assets/1387653/21622772/61a5c7a6-d1bc-11e6-809d-134936a4ac05.gif


2015年2月:考虑到目前基于Elasticsearch的搜索基础架构(2013年1月推出),不确定是否可行.

作为回答"从可靠和/或官方消息来源",这里是与GitHub负责在GitHub上引入Elasticsearch的人员进行访谈(2013年8月)

Tim Pease:我们有两种文档类型:一种是源代码文件,另一种是存储库.git的工作方式是你有提交,每个提交都有一个分支.存储库文档会跟踪已编制索引的特定存储库的最新提交.当用户将新提交推送到Github时,我们从elasticsearch中提取该存储库文档.然后我们看到最近的索引提交,然后我们得到一个列表,列出了在最近的推送和我们之前索引的内容之间已经修改,添加或删除的所有文件.然后我们可以继续更新那些已更改的文档.每次有人推送时,我们不必重新索引整个源代码树.

Andrew Cholakian:所以,你们只是索引,我假设是主分支.

蒂姆皮斯:正确.它只是你要进入那里的主分支的负责人,但仍然有很多数据,20亿个文件,30太字节.

Andrew Cholakian:这太棒了.

[...]
Run Code Online (Sandbox Code Playgroud)

Tim Pease:推送索引源代码,这是一个自我修复的过程.
我们有一个存储库文档,它跟踪最后一个索引提交.如果我们错过了,恰好错过了三次提交,那些工作失败,下一次提交,我们仍然在查看我们索引的上一次提交与我们通过这次新推送看到的提交之间的差异.
您执行了操作git diff,即可获得已更新,删除或添加的所有文件.你可以说,"好的,我们需要删除这些文件.我们需要添加这些文件,以及所有这些."它是自我修复的,这是我们采用几乎所有架构的方法.

这意味着并非所有回购的所有分支将使用该方法编入索引.
目前无法使用全局提交邮件搜索.
蒂姆·皮斯本人确认 提交的信息不被索引.

请注意,获取本地克隆的自己的elasticsearch本地索引并非不可能:请参阅" 使用ElasticSearch搜索git存储库 "

但对于特定的回购,最容易克隆它并做一个:

git log --all --grep='my search'
Run Code Online (Sandbox Code Playgroud)

(" 如何通过提交消息搜索Git存储库? "中的更多选项)


M3R*_*3RS 9

截至 2019 年中期

  1. 在左上角的搜索框中输入您的查询
  2. Enter
  3. 点击“提交”

截屏:

在此输入图像描述


Kir*_*irk 7

由于这已从Github中删除,我一直在使用gitkLinux来执行此操作.

从终端转到您的存储库并输入 gitk

在gui的中间,theres是一个搜索框.它提供了很多过滤器:

搜索栏

范围 - 包含,触摸路径,添加/删除字符串,更改行匹配

匹配类型 - Exact/IgnCase/Regexp

搜索字段 - 所有字段/标题/评论/提交者


chr*_*arx 6

这在eclipse中很有效,直到github添加了这个功能:

在此输入图像描述

https://wiki.eclipse.org/EGit/User_Guide#Searching_for_commits


Geo*_*die 5

结合其他答案,使用 Github 上的高级搜索似乎是最简单的。它基本上是一个搜索字符串生成器。 https://github.com/search/advanced

例如,我想查找 Autodesk/maya-usd 中包含“USD”的所有提交 在此输入图像描述

然后在搜索结果中可以从左侧列表中选择 Commits: 在此输入图像描述

请注意,您可能会收到一条消息(在代码搜索视图中),内容为“Your search did not match any code. However we found 1 commit that matched your search query. Alternatively try one of the tips below.请注意,‘1 提交是可单击的链接”: 在此输入图像描述 或者,只需单击左侧的“提交”,如上所示。