Sinopsis
git for-each-ref [--format=<fmt>] [--sort=<key>] [<pattern>...]
Descripción
El comando git for-each-ref itera sobre todas las refs (o un subconjunto especificado) y produce salida formateada. Es la herramienta plumbing para listar branches, tags y otras refs en formato parseable.
Soporta un poderoso lenguaje de formato (--format='%(refname:short) %(objectname:short)') para extraer exactamente los campos que necesitas en scripts.
En el uso diario, este comando se integra estrechamente con alias de shell, plugins de editor e integración continua. Los usuarios avanzados a menudo añaden alias que combinan los flags que siempre pasan. El formato de salida puede personalizarse vía configuración de Git. Cuando algo sale mal, ejecuta el comando con GIT_TRACE=1 para revelar las llamadas plumbing subyacentes.
Entender cómo este comando interactúa con el resto del modelo de datos de Git rinde dividendos. Cada comando opera sobre algún subconjunto de las piezas (objetos, index, refs, árbol de trabajo), y saber cuáles toca ayuda a predecir resultados y a recuperarse de errores.
Cuándo usar
Reach for for-each-ref in scripts that need detailed ref metadata: build version selectors, dashboards of branch ages, automated cleanup of stale branches, or release-note generators.
Opciones comunes
| Opción | Descripción |
|---|---|
--format=<fmt> | Format string with field placeholders. |
--sort=<key> | Sort by field (prefix - for descending). |
--count=<n> | Limit number of entries. |
--contains <commit> | Refs containing the given commit. |
--merged <commit> | Refs merged into the given commit. |
--points-at <commit> | Refs that directly point at a commit. |
Ejemplos
git for-each-ref --format='%(refname:short) %(objectname:short)' refs/heads/
# Local branch names with abbreviated SHAs
git for-each-ref --sort=-committerdate --count=10 \
--format='%(committerdate:short) %(refname:short)' refs/heads/
# Top 10 most recently updated branches
git for-each-ref --sort=-v:refname --format='%(refname:short)' refs/tags/ | head -5
# Five highest semver tags
Errores comunes
Forgetting the trailing / on refs/heads/ patterns can match unintended refs. Format strings can be tricky — quote field names with parentheses. --sort=v:refname only works on tags that look like versions.
Comandos relacionados
git branch, git tag, git ls-remote, git rev-parse