Sinopsis
git ls-remote [--heads] [--tags] [<repository> [<refs>...]]
Descripción
El comando git ls-remote consulta un remoto (sin clonar ni hacer fetch) e imprime el SHA-1 de cada ref junto al nombre de la ref. Es invaluable para scripting, pipelines de CI e inspección rápida: por ejemplo, encontrar el último tag en un remoto o verificar si un branch existe. Como no descarga objetos, es ligero y rápido incluso contra repositorios muy grandes.
Puedes pasar una URL directamente sin configurar primero un remoto: git ls-remote https://github.com/user/repo.git. Esto lo hace ideal para inspección puntual o scripts de build que resuelven una versión "última".
En el uso diario, git ls-remote se integra con scripts.
Entender cómo git ls-remote interactúa con el modelo de datos de Git ayuda a usarlo correctamente.
Opciones comunes
| Opción | Descripción |
|---|---|
--heads / -h | Limita la salida a refs de branch. |
--tags / -t | Limita la salida a refs de tag. |
--refs | Filtra el peel desreferenciado de tags anotados. |
--symref | Muestra a qué apuntan las refs simbólicas (como HEAD). |
--exit-code | Sale con código distinto de cero si no se encuentran refs coincidentes. |
--sort=<key> | Ordena resultados por versión, refname, etc. |
Ejemplos
git ls-remote --heads origin
# Lista todos los branches en origin con sus SHAs
git ls-remote --tags --refs origin
# Lista todos los tags (saltando ^{} dereferenciados)
git ls-remote https://github.com/git/git.git HEAD
# Muestra a qué apunta HEAD en un repo público
git ls-remote --sort=-v:refname --tags origin 'v*' | head -1
# Encuentra el tag semver más alto
Errores comunes
Parsear la salida sin --refs muestra los tags anotados dos veces (una como objeto tag, otra como name^{} para el commit subyacente). Usa --refs para suprimir las líneas peeled. La autenticación puede fallar silenciosamente contra repos privados sin un asistente de credenciales: prueba interactivamente primero.
Comandos relacionados
git remote, git fetch, git tag, git for-each-ref