En Git, ¿cómo podría buscar un archivo o directorio por ruta en varias ramas?
He escrito algo en una rama, pero no recuerdo cuál. Ahora necesito encontrarlo.
Aclaración : estoy buscando un archivo que creé en una de mis ramas. Me gustaría encontrarlo por ruta, y no por su contenido, ya que no recuerdo cuáles son los contenidos.
Respuestas:
git log
+git branch
lo encontrará por usted:También es compatible con el engorde:
Las comillas simples son necesarias (al menos si se usa el shell Bash) para que el shell pase el patrón glob a git sin cambios, en lugar de expandirlo (al igual que con Unix
find
).fuente
somefile
: si necesita buscar expresiones regulares sobre la ruta / nombre de archivo, por ejemplo, puede usar la respuesta de ididak.git log --all -- **/my_file.png
git log --grep='branch' --author='me' -- *.sql
. Trabajado como un encanto. git versión 1.7.11.1gitk
compatible con el globbing. Esa es una excelente respuesta @webmat! Si desea ver dónde se ha eliminado / creado / etc., puede usarlogit log --all --stat -- **/my_file.png
, de esa manera no tendrá que adivinar si lo está extrayendo de una confirmación que lo eliminó.git ls-tree podría ayudar. Para buscar en todas las sucursales existentes:
La ventaja de esto es que también puede buscar con expresiones regulares el nombre del archivo.
fuente
git for-each-ref --format="%(refname)" refs/heads
; do" (c) "git ls-tree --name-only" hará que la salida sea más ordenada (d) podría valer la pena señalar en su respuesta que hay una ventaja de esto sobre la solución de Dustin, es decir, que no necesita saber exactamente el nombre de archivo; puede buscar por expresión regular que coincida con cualquier parte de la rutarefs/remotes
lugar derefs/heads
. Para buscar todo (sucursales locales, sucursales de seguimiento remoto y etiquetas), simplemente userefs/
.Aunque la respuesta de ididak es bastante buena, y Handyman5 proporciona un script para usarlo, me pareció un poco restringido usar ese enfoque.
A veces necesitas buscar algo que pueda aparecer / desaparecer con el tiempo, así que ¿por qué no buscar en todas las confirmaciones? Además de eso, a veces necesitas una respuesta detallada, y otras veces solo confirmas coincidencias. Aquí hay dos versiones de esas opciones. Pon estos scripts en tu camino:
git-find-file
git-find-file-verbose
Ahora puedes hacer
Vea que usando getopt puede modificar ese script para alternar la búsqueda en todos los commits, refs, refs / heads, estado detallado, etc.
Consulte https://github.com/albfan/git-find-file para una posible implementación.
fuente
Puede usar
gitk --all
y buscar confirmaciones "rutas de contacto" y el nombre de ruta que le interesa.fuente
Copia y pega esto para usar
git find-file SEARCHPATTERN
Impresión de todas las ramas buscadas:
Imprima solo ramas con resultados:
Estos comandos añadir algunos scripts de shell mínimas directamente a su
~/.gitconfig
tan alias git mundial .fuente
find
Aquí se puede encontrar una implementación bastante decente del comando para los repositorios de Git:https://github.com/mirabilos/git-find
fuente