En un repositorio de código Git, quiero enumerar todas las confirmaciones que contienen una palabra determinada. Probé esto
git log -p | grep --context=4 "word"
pero no necesariamente me devuelve el nombre de archivo (a menos que esté a menos de 5 líneas de la palabra que busqué. También intenté
git grep "word"
pero solo me da archivos actuales y no el historial.
¿Cómo busco en todo el historial para poder seguir los cambios en una palabra en particular? Tengo la intención de buscar en mi base de código las apariciones de palabras para rastrear los cambios (buscar en el historial de archivos).
Respuestas:
Si quieres encontrar todos los commits donde mensaje de confirmación contiene una palabra dada, use
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
En git moderno también hay
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
.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)La
git diff
documentación ahora incluye:fuente
-S<string>
Busque diferencias que introducen o eliminan una instancia de <string>.-G<string>
Busque diferencias cuya línea agregada o eliminada coincida con la <regex> dada.-S<string>
es más rápido porque solo verifica si el número de ocurrencias ha<string>
cambiado, mientras que las-G<string>
búsquedas agregan y eliminan líneas en cada confirmación de confirmación.git log --grep="my words"
,.--grep
es diferente de-S
y-G
. Puede citar la cadena a cada uno de estos argumentos.git log
La piqueta encontrará confirmaciones con cambios que incluyen "word" congit log -Sword
fuente
Después de mucha experimentación, puedo recomendar lo siguiente, que muestra confirmaciones que introducen o eliminan líneas que contienen una expresión regular dada, y muestra los cambios de texto en cada una, con colores que muestran palabras agregadas y eliminadas.
Sin embargo, lleva un tiempo correr ... ;-)
fuente
GIT_PAGER=cat
o añádalo con| cat
git log --pickaxe-regex -p --color-words -S "<regexp to search for>" <file or fiepath>
Puedes probar el siguiente comando:
o usando
grep
de la siguiente manera:Ejecute este comando en el directorio principal donde desea buscar.
fuente
git log --patch --color=always | less +/searching_string
.Una forma / sintaxis más para hacerlo es:
git log -S "word"
así, puede buscar, por ejemplo
git log -S "with whitespaces and stuff @/#ü !"
fuente
vim-fugitive es versátil para ese tipo de examen en Vim.
Solía
:Ggrep
hacer eso. Para obtener más información, puede instalar vim-fugitive y buscar el turorial:help Grep
. Y este episodio: la exploración de la historia de un repositorio git lo guiará para hacer todo eso.fuente
Para usar el conector booleano en expresiones regulares:
Esta expresión regular busca la expresión regular [0-9] * o [az] * en los mensajes de confirmación.
fuente
Si desea buscar datos confidenciales para eliminarlos de su historial de git (que es la razón por la que aterricé aquí), existen herramientas para eso. Github como una página de ayuda dedicada para ese problema .
Aquí está la esencia del artículo:
fuente