¿Hay alguna forma de mostrar el git-diff filtrado por un patrón determinado?
Algo como
git grepdiff pattern
changed file
+++ some sentence with pattern
changed file 2
--- some other pattern
Desafortunadamente, la solución más simple no es lo suficientemente buena.
git diff | grep pattern
+++ some sentence with pattern
--- some other pattern
# not an option as doesn't put the filename close to the match
Vine con una solución usando awk
git diff | awk "/\+\+\+/{f = \$2}; /PATTERN/ {print f \$0} "
Pero me encantaría saber que existe un comando para esto.

Respuestas:
¿No está seguro, pero la
git diff -G <regex>bandera no está bien?fuente
git diff -G <regex> --raw¿Has probado
git diff -S<string>ogit diff -G".*string.*"? Tenga en cuenta que no son equivalentes, consulte la documentación sobre pico para saber qué hace -S.fuente
Otra posibilidad sería ver la diferencia completa y buscar la salida usando los
lesscomandos normales (escriba/y luego el patrón).Cuando haya
lessconfigurado para mostrar algunas líneas antes del uso de la coincidencia--jump-target=N, esto es bastante útil. Pruébelo así:Esto significa que la coincidencia debe mostrarse en la línea 10 (muestra 9 líneas de contexto arriba), lo que puede ser suficiente para ver también el nombre del archivo.
También puede usar, por ejemplo,
--jump-target=.5para hacer que coloque la cerilla en el medio de la pantalla.fuente
Yo uso
git log -p, que abre menos (aunque configurable), que a su vez se puede buscar con /. También haygit log -S <searchword>.fuente
Esto funcionó para mí, espero que ayude a alguien:
fuente
Creo que su enfoque de la
diffsalida "grep" es la mejor solución.Puede mejorar su script awk usando sed:
colored: regex para que coincida con las líneas de color de la terminalmarker: marcador para coincidir con la división de diferentesdifftrozos, líneas que comienzan con "diff" de colorpattern: patrón para buscar, líneas que comienzan con el color "+" o "-" y contienen "PATRÓN"Esto imprimirá trozos de diferencias completas, con PATRÓN agregado o eliminado, manteniendo también una salida de color útil.
Tenga
^[en cuenta quecoloreddebe ser real, literal^[. Puede escribirlos en bash presionando Ctrl+ V, Ctrl+[fuente
^[gustacolored=$'(\e\[[0-9;]*[a-zA-Z])'y en macOS también debe hacerlobrew install gnu-sedy reemplazarlosed --> gsedAquí hay una herramienta de diferencias personalizada que permite grepping dentro de los cambios (pero no el contexto):
Uso
GIT_EXTERNAL_DIFF="mydiff --grep foo" git diffEsto generará esas líneas en sus cambios que contienen
foo(incluidas las líneas dondefoodesaparecieron debido a sus cambios). Se puede usar cualquier patrón grep en lugar defoo.Cada línea de salida comienza con el siguiente prefijo:
El script también se puede usar sin la
--grepopción, en cuyo caso simplemente formatea la diferencia completa (es decir, proporciona el contexto completo) como se describe anteriormente.mydiff
fuente
En Windows, una solución simple es:
Si desea agrupar por nombre de archivo, use este
fuente
He estado usando esto con gran satisfacción :)
fuente