GitHubでコミットメッセージを検索するにはどうすればよいですか?


328

ないのGitリポジトリ内ではなく、中のGitHub特に-どのように私は、特定のリポジトリ/ブランチのコミットメッセージを検索するには?


3
リポジトリはパブリックですか、プライベートですか?

2
すべてのフォークでコミットメッセージを検索してみませんか?メインリポジトリに100以上のフォークがある場合、ホイールの再発明を回避しようとします!
Daniel Sokolowski、2014

それから何か変化はありますか?
PavelŠimerda2016年

ネットワークコミットを検索したい
frumbert

回答:


68

2017年時点で、GitHub自体に含まれいる機能です

彼らが使用する検索例は次のとおりです。 repo:torvalds/linux merge:false crypto policy

ここに画像の説明を入力してください https://github.com/blog/2299-search-commit-messagesの GIF画像


読み取り/書き込みアクセス権があるプライベートリポジトリを検索すると、権限エラーが発生します。
anon58192932 2017

1
私は5分間見てきたのですが、マウスが右下にズームした後、マウスがどこに行くのかわかりません。
Kevin Krumwiede、2018

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
Factor Mystic:通常はI.want.spaces.in.this.stringで十分です。
dbrower 2015

11
ヒント-g最も一般的な使用例では、フラグを省略します。私はこれについてあまり詳しく調べていませんが、を使用する-gと、検索は1か月しか遡らないようです。git log -g --grep=fixしながら、develop2年間にわたる〜8000回のコミットを持っているレポの枝だけにまでさかのぼる2月2と行く
ダンDascalescu

1
@DanDascalescu奇妙なことに、-gフラグを付けて少なくとも5か月前のコミットを見つけることができました。
クリスピー、2015年

134

アップデート(2017/01/05):

GitHubが更新を公開し、UI内からコミットメッセージ内を検索できるようになりました。詳細については、ブログ投稿を参照してください。


同じ質問があり、昨日GitHubに連絡しました:

検索エンジンをElasticsearchに切り替えたため、GitHub UIを使用してコミットメッセージを検索することはできません。しかし、その機能はチームのウィッシュリストにあります。

残念ながら、現時点ではその機能のリリース日はありません。


7
+1あなたは私がGitHubで無駄な時間を節約してくれました。したがって、代わりにコマンドラインを使用してローカルでリポジトリをgrepに複製する必要があります。ええ、それはええと進歩ですか?;)
マクナブ2014

68
Web UIでの高度な検索でさえ、最も重要なフィールドである実際のコミットメッセージでの検索は許可されていません。それはまったくとんでもないIMOです。Githubはあなたの行動をまとめます!
ブラッド・トーマス

22
はい。彼らがオープンソースソフトウェアに革命をもたらし、普及させるのに役立つウェブサービスを構築したという事実を忘れてください、彼らがこの一つの機能を持っていないという事実はそれを完全に偽物にします!
ジョンケアンズ2014年

12
簡単に見つけられる公共の場所でGitHubを使用して談話のコンテンツを公開していただきありがとうございます。これが一般市民がそのような情報を入手する唯一の方法であることはばかげています-GitHubが一般公開の問題追跡を持たないのは非常に愚かですが、そのような愚かさがある場合、ここで行ったことは何百もの方法を防ぐのに役立つ方法です同じリクエストを送信して時間を無駄にしない他の人。何百人もの時間を節約していただきありがとうございます。
Mark Amery 14

1
何千もの賛成票を持つ7年前の未解決の問題でいっぱいのAtlasianのパブリックトラッカーほどよくありません...
Askdesigners

58

簡単に言えば、github.com Webサイトでコミットメッセージを直接検索することはできません。当面はgit grep、このスレッドの他のユーザーが提案したローカルソリューションをお勧めします。

ある時点で、GitHubはgit grep単一のリポジトリのコミットメッセージに対してスタイル検索を提供していました。残念ながら、このアプローチにより、ファイルサーバーにアクセスできなくなる可能性のあるサービス拒否攻撃が行われました。このため、git grep検索を削除しました。

現在の推定値では、GitHubでのコミット数は800億マーク前後と推定されています。Googleのエンジニアは後ろで笑いますが、これはElasticSearchに保存するかなり大量のドキュメントです。このデータセットを検索可能にしたいのですが、簡単なプロジェクトではありません。


2
+1。それは私が私の答えを書くと思ったことを確認しているようです:コミットメッセージはインデックス付けされていません:インデックス付けを行っていますgit diff's(コミットメタデータではなく、コミットのコンテンツを意味します)
VonC

「ジャンプしてコミット」ボタンだけはどうですか?現在、URLからアクセスできます-stackoverflow.com/a/12214817/817632ですが、そのためのインターフェースはありません(私が知っていることではありません)。ユースケース-バージョンの代わりにbower.jsonのどこかにコミットハッシュを見つけ、このコミットが正確に何をするかを確認したい。それはグーグルの時間を節約します。
Olga、

44

これはGitHubから削除されました。私が使う:

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

ここに画像の説明を入力してください

著者でフィルタリングすることもできます。

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

3
これは私にとってはうまくいきましたが、最も賛成された答えはうまくいきませんでした。
マクダッド2016

21

コード検索のヘルプページから、これはまだ可能ではないようです。

検索するファイルまたはパスを選択する機能を含め、リポジトリ内のテキストを検索できますが、コミットで検索するように指定することはできません。

多分これを彼らに提案しますか?


18
リポジトリを検索する場合、これはより「デフォルト」のユースケースのようです。特に、たくさんのコミットがある新しいリポジトリを知る人にとっては。彼らは間違いなくこれを追加することを検討する必要があります。
Jose Browne

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に変更されるときにそれを使用します
テクノサウルス

15

2017年1月の更新(2年後):

コミットメッセージを検索できるようになりました!(まだ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:そこには2つのドキュメントタイプがあります。1つはソースコードファイルで、もう1つはリポジトリです。gitが機能する方法は、コミットがあり、コミットごとにブランチがあることです。リポジトリドキュメントは、インデックスが付けられた特定のリポジトリの最新のコミットを追跡します。ユーザーが新しいコミットをGithubにプッシュすると、そのリポジトリドキュメントがelasticsearchからプルされます。次に、最後にインデックス化されたコミットを確認し、この最近のプッシュと以前にインデックス化したものとの間に変更、追加、または削除されたすべてのファイルのリストを取得します。次に、変更されたドキュメントを更新します。誰かがプッシュするたびに、ソースコードツリー全体のインデックスを再作成する必要はありません。

Andrew Cholakian:つまり、皆さんはインデックスのみを作成していると思います。

Tim Pease:正解です。そこに入るのはmasterブランチのヘッドだけですが、それでも大量のデータ、20億のドキュメント、30テラバイトです。

Andrew Cholakian:それはものすごく巨大です。

[...]

Tim Pease:プッシュでソースコードのインデックスを作成すると、それは自己修復プロセスになります。
最後にインデックス付けされたコミットを追跡するリポジトリドキュメントがあります。失敗した場合、たまたまこれらのジョブが失敗する3つのコミット、つまり次のコミットが失敗した場合でも、インデックスに登録した以前のコミットと、この新しいプッシュで確認したコミットとの差異を調べています。
実行するgit diffと、更新、削除、または追加されたすべてのファイルが取得されます。「さて、これらのファイルを削除する必要があります。これらのファイルをすべて追加する必要があります。」これは自己修復機能であり、これがほとんどすべてのアーキテクチャで採用したアプローチです。

つまり、すべてのリポジトリのすべてのブランチがそのアプローチでインデックス付けされるわけではありません。 現在、グローバルコミットメッセージ検索は利用できません。 そしてティム・ピース自身も、コミット・メッセージが索引付けされていないこと確認しています

ローカルクローンの独自のelasticsearchローカルインデックスを取得することは不可能ではないことに注意してください。「ElasticSearchによるgitリポジトリの検索」を参照してください。

しかし、特定のレポについては、それを複製して以下を実行するのが最も簡単です。

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

(「コミットメッセージでGitリポジトリを検索する方法」のその他のオプション


7

これはGitHubから削除されたので、これgitkをLinuxで使用してきました。

ターミナルからリポジトリに移動し、と入力しgitkます。

GUIの中央には、検索ボックスがあります。それはフィルターの良い選択を提供します:

検索バー

スコープ-含む、パスに触れる、文字列を追加/削除する、行の一致を変更する

マッチタイプ-完全一致/一致ケース/正規表現

検索フィールド-すべてのフィールド/見出し/コメント/コミッター



4

リポジトリのローカルバージョンがある場合は、デフォルトのブラウザーの新しいタブで、検索用語に一致するすべてのコミットの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年半ば以降、左上の検索ボックスに検索するものを入力して、[コミット]をクリックするだけです。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.