¿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
less
comandos normales (escriba/
y luego el patrón).Cuando haya
less
configurado 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=.5
para 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
diff
salida "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 diferentesdiff
trozos, 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 quecolored
debe 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-sed
y reemplazarlosed --> gsed
Aquí 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 diff
Esto generará esas líneas en sus cambios que contienen
foo
(incluidas las líneas dondefoo
desaparecieron 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
--grep
opció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