oneline - git search text




如何grep git diff? (6)

不確定但是不是git diff -G <regex> flag OK?

-G <正則表達式>

Look for differences whose added or removed line matches the given <regex>.

有沒有辦法顯示由給定模式過濾的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} "

但是很想知道有這方面的命令。


你有沒有嘗試過git diff -S<string>git diff -G".*string.*" ? 請注意,它們不相同,請參閱有關 -S所做的有關pickaxe的文檔


在Windows上,一個簡單的解決方案是:

git diff -U0 | findstr string

如果要按文件名分組,請使用此選項

FOR /F "usebackq delims==" %i IN (`git diff --name-only`) do git diff -U0 %~fi | findstr string

我使用git log -p ,它打開較少(雖然可配置),反過來可以用/搜索。 還有git log -S <searchword>


這對我來說很有用,我希望它會幫助別人:

git diff | grep  -P '^\+|^\-'

這是一個自定義diff工具,允許在內部更改(但不是上下文):

用法

GIT_EXTERNAL_DIFF="mydiff --grep foo" git diff

這將在包含foo的更改中輸出這些行(包括由於您的更改而foo消失的行)。 可以使用任何grep模式代替foo

每個輸出行以以下前綴開頭:

filename: oldlinenum: newlinenum|

該腳本也可以在沒有--grep選項的情況下使用,在這種情況下,它只是簡單地格式化完整的差異(即提供完整的上下文),如上所述。

mydiff

#!/bin/bash

my_diff()
{
    diff --old-line-format="$1"':%6dn:      |-%L'     \
         --new-line-format="$1"':      :%6dn|+%L'     \
         --unchanged-line-format="$1"':%6dn:%6dn| %L' \
         $2 $3
}

if [[ $1 == '--grep' ]]
then
    pattern="$2"
    shift 2
    my_diff "$1" "$2" "$5"|grep --color=never '^[^|]\+|[-+].\+'"$pattern"'.*'
else
    my_diff "$1" "$2" "$5"
fi

exit 0






diff