Si quieres encontrar todos los commits donde mensaje de confirmación contiene una palabra dada, use
$ git log --grep=word
Si desea encontrar todas las confirmaciones donde se agregó o eliminó "palabra" en el contenido del archivo (para ser más exactos: dónde cambió el número de ocurrencias de "palabra"), es decir, busque el contenido commit , use la llamada búsqueda 'pickaxe' con
$ git log -Sword
En git moderno también hay
$ git log -Gword
buscar diferencias cuya línea agregada o eliminada coincida con "palabra" (también confirmar contenido ).
Tenga en cuenta que, -Gde forma predeterminada, acepta una expresión regular, mientras que -Sacepta una cadena, pero puede modificarse para aceptar expresiones regulares utilizando--pickaxe-regex .
Para ilustrar la diferencia entre -S<regex> --pickaxe-regexy -G<regex>, considere una confirmación con la siguiente diferencia en el mismo archivo:
+ return !regexec(regexp, two->ptr, 1, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
Mientras git log -G"regexec\(regexp"mostrará esta confirmación, git log -S"regexec\(regexp" --pickaxe-regexno lo hará (porque el número de apariciones de esa cadena no cambió).
Con Git 2.25.1 (febrero de 2020), la documentación se aclara en torno a esas expresiones regulares.
Ver commit 9299f84 (06 de febrero de 2020) por Martin Ågren (``) .
(Fusionada por Junio C Hamano - gitster- en commit 0d11410 , 12 de febrero de 2020)
diff-options.txt: evite la sobrecarga "regex" en el ejemplo
Reportado por: Adam Dinwoodie
Firmado por: Martin Ågren
Revisado por: Taylor Blau
Cuando ejemplificamos la diferencia entre -Gy -S(usando --pickaxe-regex), lo hacemos usando un ejemplo diff ygit diff invocación que involucra "regexec", "regexp", "regmatch", ...
El ejemplo es correcto, pero podemos hacer que sea más fácil desenredar evitando escribir "regex. *" A menos que sea realmente necesario para aclarar nuestro punto.
Utilice algunas palabras inventadas, no regexy en su lugar.
La git diffdocumentación ahora incluye:
Para ilustrar la diferencia entre -S<regex> --pickaxe-regexy
-G<regex>, considere una confirmación con la siguiente diferencia en el mismo archivo:
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);
Mientras git log -G"frotz\(nitfol"mostrará esta confirmación, git log
-S"frotz\(nitfol" --pickaxe-regexno lo hará (porque el número de apariciones de esa cadena no cambió).