web-dev-qa-db-ja.com

Gitで特定の単語の差分や内容をコミットする方法は?

Gitコードリポジトリで、私は特定のWordを含む全てのコミットをリストしたいです。私はこれを試しました

git log -p | grep --context=4 "Word"

しかし、それは必ずしもファイル名を返すわけではありません(それが私が検索したWordから5行以内でない限り)。私も試してみました

git grep "Word"

しかしそれは私に現在のファイルだけを与え、歴史は与えない。

特定の単語の変更を追跡できるように、履歴全体を検索する方法を教えてください。変更を追跡するためにWordの出現箇所を自分のコードベースで検索することを意味します(ファイル履歴で検索)。

555

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, &regmatch, 0);
...
-    hit = !regexec(regexp, mf2.ptr, 1, &regmatch, 0);

git log -G"regexec\(regexp"はこのコミットを表示しますが、git log -S"regexec\(regexp" --pickaxe-regexは表示しません(その文字列の出現数は変化しなかったため)。

808
Jakub Narębski

git logのつるはしはgit log -Swordを含む "Word"を含む変更を伴うコミットを見つけるでしょう。

250
u0b34a0f6ae

たくさんの実験の後、私は以下を推薦することができます、そしてそれは与えられた正規表現を含む行を導入または削除するコミットを示し、単語が追加され削除されたことを示す色でそれぞれの変更を表示します。

git log --pickaxe-regex -p --color-words -S "<regexp to search for>"

実行にしばらく時間がかかります... ;-)

18
CharlesW

もう1つの方法/構文は次のとおりです。git log -S "Word"
このようにあなたは例えばgit log -S "with whitespaces and stuff @/#ü !"を検索することができます

9
1u-

次のコマンドを試すことができます。

git log --patch --color=always | less +/searching_string

またはgrepを次のように使用します。

git rev-list --all | GIT_PAGER=cat xargs git grep 'search_string'

検索したい親ディレクトリでこのコマンドを実行します。

7
kenorb

正規表現にブール値コネクタを使用するには:

git log --grep '[0-9]*\|[a-z]*'

この正規表現は、コミットメッセージで正規表現[0-9] *または[a-z] *を検索します。

2
Reudismam

vim-fugitive はVimで調べるようなその種には多用途です。

そのためには:Ggrepを使用してください。より多くの情報のためにあなたはvim-fugitiveをインストールして:help Grepでturorialを調べることができます。そして、このエピソードは、 gitリポジトリの歴史を探る で、すべてのことができるようになります。

2
Lerner Zhang

あなたの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レポクリーナーのドキュメント を参照してください。

0
edelans