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, -G
de forma predeterminada, acepta una expresión regular, mientras que -S
acepta una cadena, pero puede modificarse para aceptar expresiones regulares utilizando--pickaxe-regex
.
Para ilustrar la diferencia entre -S<regex> --pickaxe-regex
y -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-regex
no 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 -G
y -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 diff
documentación ahora incluye:
Para ilustrar la diferencia entre -S<regex> --pickaxe-regex
y
-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-regex
no lo hará (porque el número de apariciones de esa cadena no cambió).