tipos - Usando git, ¿cómo podría buscar una cadena en todas las ramas?
¿para qué nos sirve el sha-1 cuando creamos tags? (5)
Usando git, ¿cómo puedo buscar dentro de todos los archivos en todas las ramas locales para una cadena dada?
Específico de Github: ¿es posible realizar la búsqueda anterior en todas las ramas de github? (Hay varias ramas remotas en mi repositorio remoto de Github que idealmente no tendría que bajar para esta búsqueda).
En muchos casos, git rev-list --all
pueden devolver una gran cantidad de confirmaciones que tardan una eternidad en analizar. Si en lugar de buscar en cada confirmación en cada una de las ramas de su historial de repositorio solo desea buscar todas las sugerencias de ramas, puede reemplazarlas con git show-ref --heads
. Entonces, en total:
git grep "string" `git show-ref --heads`
o:
git show-ref --heads | xargs git grep "string"
Consejo: Puede escribir la salida en archivo para ver en el editor.
nano ~/history.txt
git show-ref --heads | xargs git grep "search string here" >> ~/history.txt
Hay algunos problemas con las soluciones enumeradas aquí (incluso aceptadas).
- No necesita enumerar todos los hashes ya que obtendrá duplicados, también lleva más tiempo.
Se basa en esto donde se puede buscar una cadena "test -f /"
en múltiples ramas master
y dev
como
git grep "test -f /" master dev
que es lo mismo que
printf "master/ndev" | xargs git grep "test -f /"
Así que aquí va.
Esto busca los valores hash para la punta de todas las ramas locales y busca solo en esas confirmaciones.
git branch -v --no-abbrev | awk -F'' *'' ''{print $3}'' | xargs git grep "string/regexp"
Si necesita buscar en sucursales remotas también, agregue -a
:
git branch -a -v --no-abbrev | awk -F'' *'' ''{print $3}'' | xargs git grep "string/regexp"
Actualizar:
# search in local branches
git branch | cut -c3- | xargs git grep "string"
# search in remote branches
git branch -r | cut -c3- | xargs git grep "string"
# search in all (local and remote) branches
git branch -a | cut -c3- | xargs git grep "string"
# search in branches, and tags
git show-ref | grep -v "refs/stash" | cut -d'' '' -f2 | xargs git grep "string"
Puedes hacer esto en un repositorio de Git:
git grep "string/regexp" $(git rev-list --all)
La búsqueda avanzada de Github tiene la capacidad de búsqueda de código:
La búsqueda de Código buscará en todo el código alojado públicamente en GitHub. También puede filtrar por:
- el idioma:
language:
- el nombre del repositorio (incluido el nombre de usuario):
repo:
- la ruta del archivo:
path:
Puedes intentar esto
git log -Sxxxx #search all commits
git log -Sxxxx --branches[=<pattern>] #search branches
Si usas el comando @manojlds git grep y obtienes un error:
-bash: /usr/bin/git: Argument list too long"
entonces deberías usar xargs:
git rev-list --all | xargs git grep "string/regexp"
También vea ¿Cómo grep (buscar) el código comprometido en el historial de git?