Se você deseja encontrar todos os commits nos quais a mensagem de commit contém uma determinada palavra, use
$ git log --grep=word
Se você deseja encontrar todos os commits em que "word" foi adicionada ou removida no conteúdo do arquivo (para ser mais exato: onde o número de ocorrências de "word" foi alterado), ou seja, pesquise o conteúdo de commit , use a chamada 'picareta' com
$ git log -Sword
No git moderno também há
$ git log -Gword
procurar diferenças cuja linha adicionada ou removida corresponda à "palavra" (também confirmar o conteúdo ).
Observe que, -G
por padrão, aceita uma regex, enquanto -S
aceita uma string, mas pode ser modificado para aceitar regexes usando o --pickaxe-regex
.
Para ilustrar a diferença entre -S<regex> --pickaxe-regex
e -G<regex>
, considere uma confirmação com o seguinte diff no mesmo arquivo:
+ return !regexec(regexp, two->ptr, 1, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
Enquanto git log -G"regexec\(regexp"
mostrará esse commit, git log -S"regexec\(regexp" --pickaxe-regex
não será (porque o número de ocorrências dessa string não mudou).
Com o Git 2.25.1 (fevereiro de 2020), a documentação é esclarecida em torno dessas regexes.
Veja commit 9299f84 (06 fev 2020) por Martin Ågren (``) .
(Mesclado por Junio C Hamano - gitster
- na confirmação 0d11410 , 12 de fevereiro de 2020)
diff-options.txt
: evite sobrecarga "regex" no exemplo
Reportado por: Adam Dinwoodie
Assinado por: Martin Ågren
Analisado por: Taylor Blau
Quando exemplificamos a diferença entre -G
e -S
(usando --pickaxe-regex
), fazemos isso usando um exemplo diff e git diff
invocação envolvendo "regexec", "regexp", "regmatch", ...
O exemplo está correto, mas podemos facilitar o desembaraço, evitando escrever "regex. *", A menos que seja realmente necessário expor nosso argumento.
Use algumas palavras inventadas e não regulares.
A git diff
documentação agora inclui:
Para ilustrar a diferença entre -S<regex> --pickaxe-regex
e
-G<regex>
, considere uma confirmação com o seguinte diff no mesmo arquivo:
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);
Enquanto git log -G"frotz\(nitfol"
mostrará esse commit, git log
-S"frotz\(nitfol" --pickaxe-regex
não será (porque o número de ocorrências dessa string não mudou).