93

特定のパターンでフィルタリングされたgit-diffを表示する方法はありますか?

何かのようなもの

git grepdiff pattern

changed file
+++ some sentence with pattern
changed file 2
--- some other pattern

残念ながら、最も単純な解決策では十分ではありません

git diff | grep pattern 

+++ some sentence with pattern
--- some other pattern
# not an option as doesn't put the filename close to the match

awkを使用した回避策がありました

git diff | awk "/\+\+\+/{f = \$2}; /PATTERN/ {print f \$0} "

しかし、これにはコマンドがあることを知りたいと思います。

4

10 に答える 10

113

よくわかりませんが、git diff -G <regex>フラグは OK ではありませんか?

-G <正規表現>

Look for differences whose added or removed line matches the given <regex>.
于 2012-09-17T15:41:57.387 に答える
13

または試しましたgit diff -S<string>git diff -G".*string.*"?-Sの機能については、つるはしに関するドキュメントを参照してください。

于 2012-09-17T15:49:05.467 に答える
12

もう 1 つの可能性は、差分全体を表示し、通常のlessコマンド (タイプ/してからパターン) を使用して出力を検索することです。

lessを使用して試合前にいくつかの行を表示するように構成した場合--jump-target=N、これは非常に便利です。次のようにしてみてください。

PAGER="/usr/bin/less --jump-target=10" git diff

これは、一致が 10 行目に表示される必要があることを意味します (上記の 9 行のコンテキストを示しています)。これは、ファイル名も確認するのに十分な場合があります。

--jump-target=.5たとえば、マッチを画面の中央に配置することもできます。

于 2012-09-17T15:56:59.567 に答える
5

私は を使用しますgit log -p。これはあまり開きません (構成可能ですが)。これは、 で検索できます/。もありgit log -S <searchword>ます。

于 2012-09-17T15:42:43.193 に答える
1

これは私のために仕事をしました、私はそれが誰かを助けることを願っています:

git diff | grep  -P '^\+|^\-'
于 2018-03-07T16:52:33.060 に答える
1

Windows での簡単な解決策は次のとおりです。

git diff -U0 | findstr string

ファイル名でグループ化する場合は、これを使用します

FOR /F "usebackq delims==" %i IN (`git diff --name-only`) do git diff -U0 %~fi | findstr string
于 2018-02-01T11:22:07.217 に答える