Para procurar conteúdo de confirmação (ou seja, linhas reais de origem, em vez de confirmar mensagens e similares), você precisa:
git grep <regexp> $(git rev-list --all)
git rev-list --all | xargs git grep <expression>
funcionará se você tiver um erro "A lista de argumentos é muito longa".
Se você deseja limitar a pesquisa a alguma subárvore (por exemplo, "lib / util"), será necessário passar isso para o rev-list
subcomando e grep
também:
git grep <regexp> $(git rev-list --all -- lib/util) -- lib/util
Isso irá verificar todo o seu texto de confirmação para regexp
.
O motivo para passar o caminho nos dois comandos é porque rev-list
retornará a lista de revisões onde todas as alterações lib/util
ocorreram, mas você também precisa passar para grep
que ele só procure lib/util
.
Imagine o seguinte cenário: grep
pode encontrar o mesmo <regexp>
em outros arquivos contidos na mesma revisão retornada por rev-list
(mesmo se não houver nenhuma alteração nesse arquivo nessa revisão).
Aqui estão algumas outras maneiras úteis de pesquisar sua fonte:
Pesquise na árvore de trabalho o texto que corresponde à expressão regular regexp:
git grep <regexp>
Pesquise na árvore de trabalho as linhas de texto que correspondem à expressão regular regexp1 ou regexp2:
git grep -e <regexp1> [--or] -e <regexp2>
Pesquise na árvore de trabalho as linhas de texto que correspondem à expressão regular regexp1 e regexp2, relatando apenas os caminhos do arquivo:
git grep -l -e <regexp1> --and -e <regexp2>
Pesquise na árvore de trabalho arquivos que tenham linhas de texto que correspondem à expressão regular regexp1 e linhas de texto que correspondem à expressão regular regexp2:
git grep -l --all-match -e <regexp1> -e <regexp2>
Pesquise na árvore de trabalho as linhas alteradas do padrão de correspondência de texto:
git diff --unified=0 | grep <pattern>
Pesquise em todas as revisões o texto correspondente à expressão regular regexp:
git grep <regexp> $(git rev-list --all)
Pesquise em todas as revisões entre rev1 e rev2 o texto que corresponde à expressão regular regexp:
git grep <regexp> $(git rev-list <rev1>..<rev2>)
git log -S
culpa) * [Diversão com "git log --grep"] [2] (pesquisando mensagens de confirmação ) * [Diversão com "git grep"] [3] [2]: gitster.livejournal.com/30195.html [3]: gitster.livejournal.com/27674.html