2012-06-17 14 views
18

Estoy tratando de buscar cambios en mi historial de git relacionados con un nombre de variable muy específico.Git buscar todos los diffs

He intentado hacer esto:

git diff HEAD~25000 | grep -in mydistinctvariablename 

Los resultados no me dicen que practican las líneas de resultados está y se tarda un poco de tiempo (aproximadamente 5-7 minutos).

¿Alguien tiene una mejor solución, tiempo y resultados sabios?

+2

posible duplicado de [¿Cómo grep (buscar) el historial de git?] (Http://stackoverflow.com/questions/2928584/how-to-grep-search-the-git-history) –

+0

Hmm ninguno de esos Los comandos me dicen de qué revisión proviene el resultado de la búsqueda, solo el archivo que ocurrió en –

+0

. Para mí, es el SHA antes del nombre del archivo en los resultados. Usé el primer comando en la primera respuesta. La [segunda respuesta] (http://stackoverflow.com/a/2928721/211563) probablemente sea más lo que está buscando, y eso también le da al SHA (siempre que su formato de registro lo muestre). –

Respuesta

27

git log es generalmente el comando que se debe usar al examinar el historial de confirmaciones. git log --grep se puede utilizar para buscar expresiones regulares en el mensaje de confirmación.

lo que está después es git log -S el que busca el contenido comprometerse simplemente o git log -G el que busca con una expresión regular:

-S buscar las diferencias que introducen o eliminar una instancia de. Tenga en cuenta que esto es diferente de la cadena que simplemente aparece en la salida de diff; ver la entrada de piquetas en gitdiffcore (7) para más detalles.

Así, por ejemplo, en el repositorio msysGit puedo encontrar el commit que introdujo Tcl 8.5.8 utilizando:

C:\src\msysgit\src>git log --oneline --grep "8\.5\.8" 
d938476 Make `NO_SFX=1 portable-release.sh` work 
ef1dc94 Update tk to version 8.5.8 
a910049 Update tcl to version 8.5.8 
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list 

que acaba buscó 8.5.8 en los mensajes de cometer o como usted querer hacer mirando una cadena que sólo ocurrió en el diff comprometida:

C:\src\msysgit\src>git log --oneline -S"version=8.5.8" 
7be8622 tcltk: update release.sh script for tcl/tk 8.5.9 
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list 

el rango limitante que tiene en su muestra todavía se puede utilizar para limitar los compromete a ser examinados. Lee cuidadosamente el manual de registro de git para tener una buena idea de todas las cosas que puede hacer.

Tenga en cuenta que sólo se ve -S las diferencias de cuerdas simples - si realmente desea buscar en el contenido utilizando una expresión regular similar a la suya ejemplo, entonces debería usar la opción en lugar de -S-G pero esto será significativamente más lento.

+0

Si puedo, en el primer fragmento, la línea 'd938476 Make \' NO_SFX = 1 portable-release.sh \ 'work' es confusa, ya que hay indicios de que el primer fragmento es el segundo (en otras palabras, yo creo que sería más claro si esa línea se eliminó de la salida de muestra ...) – acdcjunior

Cuestiones relacionadas