Gitコードリポジトリで、私は特定のWordを含む全てのコミットをリストしたいです。私はこれを試しました
git log -p | grep --context=4 "Word"
しかし、それは必ずしもファイル名を返すわけではありません(それが私が検索したWordから5行以内でない限り)。私も試してみました
git grep "Word"
しかしそれは私に現在のファイルだけを与え、歴史は与えない。
特定の単語の変更を追跡できるように、履歴全体を検索する方法を教えてください。変更を追跡するためにWordの出現箇所を自分のコードベースで検索することを意味します(ファイル履歴で検索)。
commit messageに与えられたWordが含まれているすべてのコミットを見つけたい場合は、
$ git log --grep=Word
ファイルの内容(より正確に言うと、 "Word"の出現数が変化した場所)で "Word"が追加または削除されたすべてのコミットを検索する場合は、コミット内容、いわゆる 'pickaxe'検索を使って
$ git log -Sword
現代のgitにもあります
$ git log -Gword
追加または削除された行が "Word"に一致する相違を検索する(コミット内容)。
デフォルトで-G
は正規表現を受け入れますが、-S
は文字列を受け入れますが、--pickaxe-regex
を使って正規表現を受け入れるように修正することができます。
-S<regex> --pickaxe-regex
と-G<regex>
の違いを説明するために、同じファイル内で次のdiffを使ったコミットを考えてください。+ return !regexec(regexp, two->ptr, 1, ®match, 0); ... - hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
git log -G"regexec\(regexp"
はこのコミットを表示しますが、git log -S"regexec\(regexp" --pickaxe-regex
は表示しません(その文字列の出現数は変化しなかったため)。
git log
のつるはしはgit log -Sword
を含む "Word"を含む変更を伴うコミットを見つけるでしょう。
たくさんの実験の後、私は以下を推薦することができます、そしてそれは与えられた正規表現を含む行を導入または削除するコミットを示し、単語が追加され削除されたことを示す色でそれぞれの変更を表示します。
git log --pickaxe-regex -p --color-words -S "<regexp to search for>"
実行にしばらく時間がかかります... ;-)
もう1つの方法/構文は次のとおりです。git log -S "Word"
このようにあなたは例えばgit log -S "with whitespaces and stuff @/#ü !"
を検索することができます
次のコマンドを試すことができます。
git log --patch --color=always | less +/searching_string
またはgrep
を次のように使用します。
git rev-list --all | GIT_PAGER=cat xargs git grep 'search_string'
検索したい親ディレクトリでこのコマンドを実行します。
正規表現にブール値コネクタを使用するには:
git log --grep '[0-9]*\|[a-z]*'
この正規表現は、コミットメッセージで正規表現[0-9] *または[a-z] *を検索します。
vim-fugitive はVimで調べるようなその種には多用途です。
そのためには:Ggrep
を使用してください。より多くの情報のためにあなたはvim-fugitiveをインストールして:help Grep
でturorialを調べることができます。そして、このエピソードは、 gitリポジトリの歴史を探る で、すべてのことができるようになります。
あなたのgit履歴からそれを削除するために機密データを検索したい場合(これが私がここに上陸した理由です)、そのためのツールがあります。 Github as その問題に関する専用のヘルプページ 。
これが記事の要旨です。
BFG Repo-Cleaner は、不要なデータを削除するためのgit filter-branchに代わる、より高速で簡単な方法です。たとえば、機密データを含むファイルを削除し、最新のコミットをそのままにしておくには、次のコマンドを実行します。
bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA
Passwords.txtにリストされているすべてのテキストがリポジトリの履歴のどこにある場合でも置き換えるには、次のコマンドを実行します。
bfg --replace-text passwords.txt
詳しい使い方とダウンロードの説明は BFGレポクリーナーのドキュメント を参照してください。