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


Answers:


68

截至2017年,它已包含在GitHub本身中

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

在此处输入图片说明 来自https://github.com/blog/2299-search-commit-messages的 GIF图像


在搜索我具有读/写访问权限的私人仓库时,出现权限错误。
anon58192932 '13

1
我已经观看了五分钟,但无法确定鼠标向右缩放后的位置。
凯文·克鲁姆维德

1
@KevinKrumwiede可能是“停止录制”按钮的哈哈
Corey Cole,

我放弃并使用“ git log --all --grep = searhterm”
Edwin Evans

206

您曾经能够做到这一点,但是GitHub在2013年中某个时候删除了此功能。要在本地实现此目的,您可以执行以下操作:

git log -g --grep=STRING

-g如果要搜索其他分支和悬挂提交,请使用该标志。)

-g, --walk-reflogs
    Instead of walking the commit ancestry chain, walk reflog entries from
    the most recent one to older ones.

143
他们为什么要删除它?这是一个非常有用的功能。
乔什·布朗

1
神秘因素:此字符串中的I.want.spaces通常就足够了。
dbrower

11
提示忽略-g大多数常见用例的标志。我并没有对此进行过多研究,但是使用-g,搜索似乎只能追溯到一个月。git log -g --grep=fix而在develop有8000〜跨越提交两年内回购的分支,只是去早在二月二
达恩·达斯卡莱斯卡

1
@DanDascalescu奇怪,我能够找到带有该-g标志至少5个月的提交。
克里斯皮(Chrispy)2015年

134

更新(2017/01/05):

GitHub发布了一个更新,现在您可以从其UI内的提交消息中进行搜索。有关更多信息,请参见博客文章


我有同样的问题,昨天与GitHub联系了:

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

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


7
+1您为我节省了在GitHub上毫无成果的时间,不知道如何实现我认为将是显而易见的功能。因此,我们现在不得不通过命令行在本地将存储库克隆到grep。哎呀,这是进步吗?!;)
McNab 2014年

68
即使他们在Web UI中进行高级搜索,也不允许在最重要的字段-实际的提交消息上进行搜索。这绝对是可笑的海事组织。Github一起行动吧!
布拉德·托马斯

22
是。忘了他们已经建立了一个网络服务可以帮助革新和普及开源软件的事实,而他们却没有此功能,这简直就是一个骗局!
乔恩·凯恩斯

12
感谢您抽出宝贵的时间在容易找到的公共场所使用GitHub发布您的演讲内容。荒谬的是,这是公众获取此类信息的唯一方法-对于GitHub没有公共问题跟踪器,这是非常愚蠢的-但是在存在此类愚蠢行为的情况下,您在此处所做的事情是防止数百种此类行为的有用方法其他人则浪费时间发送相同的请求。感谢您节省的数百个工时。
Mark Amery 2014年

1
并没有比Atlasian的公开跟踪器好多少,Atlasian的公开跟踪器充满了7年的未解决问题,并且有1000份支持投票...
Askdesigners

58

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

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

根据目前的估算,GitHub的提交数量约为800亿个大关。尽管Google工程师笑了我们的后盾,但这是要存储在ElasticSearch中的大量文档。我们希望使该数据集可搜索,但是这不是一个简单的项目。


2
+1。这似乎证实了我写我的答案的想法:未对提交消息进行索引:您正在使用索引git diff's(意味着提交的内容,而不是提交元数据)
VonC 2015年

只是“跳转提交”按钮怎么样?当前可以从URL-stackoverflow.com/a/12214817/817632访问它,但是没有接口(我不知道)。用例-在bower.json中的某个地方而不是版本中找到一个提交哈希,并想知道该提交的确切作用。它将节省一些谷歌搜索时间。
奥尔加

44

这已从GitHub中删除。我用:

$git log --all --oneline | grep "search query"

在此处输入图片说明

您还可以按作者过滤:

$git log --all --oneline --author=rickhanlonii | grep "search query"

3
这对我有用,但最不赞成的答案没有。
makdad

21

从有关搜索代码的帮助页面看,这似乎还不可能。

您可以在存储库中搜索文本,包括选择文件或搜索路径的能力,但不能指定要在提交中搜索的文本。

也许向他们建议


18
在通过存储库进行搜索时,这似乎更像“默认”用例。特别是对于那些了解大量提交的新存储库的人。他们绝对应该考虑添加此内容。
何塞·布朗

19

您可以使用Google抓取的存储库来执行此操作(结果因存储库而异)。

在所有已爬网存储库的所有分支中搜索“更改许可证”

“更改许可证”站点:https : //github.com/*/*/commits

在所有爬网的存储库的主分支中搜索“更改许可证”:

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

在所有已爬网的Twitter存储库的主分支中搜索“更改许可证”

“更改许可证”站点:https : //github.com/twitter/*/commits/master

在twitter / some_project存储库的所有分支中搜索“更改许可证”

“更改许可证”站点:https : //github.com/twitter/some_project/commits


4
@DZenBot如果它不是公共仓库,那么您可能已经有一个本地副本到git grep了,我只是为那些不想克隆整个公共仓库以找出何时进行更改的人提供了这个答案。我主要用它来查找删除对旧版gtk版本的支持或当许可证更改为gpl3时的提交
technosaurus

15

20171月更新(两年后):

您现在可以搜索提交消息!(仍仅在master分支中)

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


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

作为“从可靠的和/或官方来源获取”的答案,这是对负责在GitHub上介绍Elasticsearch的GitHub人员采访(2013年8月)

蒂姆·皮斯(Tim Pease):我们这里有两种文档类型:一种是源代码文件,另一种是存储库。git的工作方式是您拥有提交,并且每个提交都有一个分支。存储库文档会跟踪已建立索引的特定存储库的最新提交。当用户将新的提交推送到Github时,我们然后从elasticsearch提取该存储库文档。然后,我们看到最近索引的提交,然后获得在此最近的推送与先前索引的内容之间已被修改,添加或删除的所有文件的列表。然后,我们可以继续并仅更新那些已更改的文档。我们不必每次有人按下就重新索引整个源代码树。

Andrew Cholakian:所以,我假设你们只索引master分支。

蒂姆·皮斯(Tim Pease):正确。您只是要进入那里的master分支的头,仍然有很多数据,20亿个文档,30 TB。

安德鲁·乔拉基安(Andrew Cholakian):真是太棒了。

[...]

蒂姆·皮斯(Tim Pease):在推入索引源代码的情况下,这是一个自愈过程。
我们拥有该存储库文档,该文档可跟踪上次索引的提交。如果我们错过了,恰好错过了那些提交失败的三个提交,则进入了下一个提交,我们仍在查看索引的上一个提交与通过此新推送看到的提交之间的差异。
您执行a git diff,您将获得所有已更新,删除或添加的文件。您可以说:“好的,我们需要删除这些文件。我们需要添加所有这些文件。” 它是自我修复的,这是我们几乎对所有体系结构都采用的方法。

这一切都意味着并非所有存储库的所有分支将使用该方法建立索引。
暂时无法进行全局提交消息搜索。
蒂姆·皮斯本人确认 提交的信息不被索引

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

但是对于特定的回购协议,最简单的方法仍然是克隆它并执行以下操作:

git log --all --grep='my search'

(更多的选项位于“ 如何通过提交消息搜索Git存储库? ”)


7

由于已从GitHub中删除了此代码,因此我一直gitk在Linux上使用它来执行此操作。

从终端转到您的存储库,然后键入gitk

在GUI的中间,有一个搜索框。它提供了很好的过滤器选择:

搜索栏

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

匹配类型-精确/ IgnCase /正则表达式

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



4

如果您拥有存储库的本地版本,则可能需要尝试使用我写的这个原始Shell脚本,在默认浏览器的新标签页中打开与所有搜索字词匹配的GitHub页面:

#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep="$1"); do
    python -mwebbrowser https://github.com/RepoOwnerUserName/RepoName/commit/$sha1 >/dev/null 2>/dev/null
done

只需替换https://github.com/RepoOwnerUserName/RepoName/为存储库的实际GitHub URL,将脚本保存在某个位置(例如githubsearch.sh,将其保存为可执行文件(chmod +x githubsearch.sh),然后将以下别名添加到~/.bashrc文件中:

alias githubsearch='/path/to/githubsearch.sh'

然后,在您的Git存储库中的任何地方,只需在终端上执行以下操作:

githubsearch "what you want to search for"

并且与您的搜索词(不区分大小写)匹配的所有提交都将在浏览器中打开其对应的GitHub页面。(请注意,如果您的搜索词出现在成百上千的提交中,这很可能会使您的浏览器崩溃并占用您PC的CPU一段时间。)


0

从2019年中开始,只需在左上方的搜索框中键入要搜索的内容,然后单击“提交”即可。

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.