Para buscar contenido de confirmación (es decir, líneas de origen reales, en lugar de mensajes de confirmación y similares), debe hacer lo siguiente:
git grep <regexp> $(git rev-list --all)
git rev-list --all | xargs git grep <expression>
funcionará si te encuentras con un error "Lista de argumentos demasiado larga".
Si desea limitar la búsqueda a algún subárbol (por ejemplo, "lib / util"), deberá pasar eso al rev-list
subcomando y grep
también:
git grep <regexp> $(git rev-list --all -- lib/util) -- lib/util
Esto buscará en todo su texto de confirmación regexp
.
La razón para pasar la ruta en ambos comandos es porque rev-list
devolverá la lista de revisiones donde lib/util
ocurrieron todos los cambios , pero también debe pasar para grep
que solo busque lib/util
.
Solo imagine el siguiente escenario: grep
podría encontrar lo mismo <regexp>
en otros archivos que están contenidos en la misma revisión devuelta por rev-list
(incluso si no hubo cambios en ese archivo en esa revisión).
Aquí hay otras formas útiles de buscar su fuente:
Busque en el árbol de trabajo el texto que coincida con la expresión regular regexp:
git grep <regexp>
Busque en el árbol de trabajo líneas de texto que coincidan con la expresión regular regexp1 o regexp2:
git grep -e <regexp1> [--or] -e <regexp2>
Busque en el árbol de trabajo líneas de texto que coincidan con la expresión regular regexp1 y regexp2, informando solo las rutas de los archivos:
git grep -l -e <regexp1> --and -e <regexp2>
Busque en el árbol de trabajo archivos que tengan líneas de texto que coincidan con la expresión regular regexp1 y líneas de texto que coincidan con la expresión regular regexp2:
git grep -l --all-match -e <regexp1> -e <regexp2>
Busque en el árbol de trabajo líneas modificadas de patrones de coincidencia de texto
git diff --unified=0 | grep <pattern>
Busque en todas las revisiones el texto que coincida con la expresión regular regexp:
git grep <regexp> $(git rev-list --all)
Busque en todas las revisiones entre rev1 y rev2 el texto que coincida con la expresión regular regexp:
git grep <regexp> $(git rev-list <rev1>..<rev2>)
git log -S
y culpa) * [Diversión con "git log --grep"] [2] (búsqueda de mensajes de confirmación ) * [Diversión con "git grep"] [3] [2]: gitster.livejournal.com/30195.html [3]: gitster.livejournal.com/27674.html