Por Anónimo (no verificado) , 29 Abril 2026

Sinopsis

git reflog [show] [<ref>]
git reflog expire [--expire=<time>] [--all]
git reflog delete <entry>

Descripción

El comando git reflog muestra el log local de cómo HEAD (u otra ref) se ha movido con el tiempo: cada commit, reset, rebase, etc. Es la red de seguridad de Git: incluso después de operaciones destructivas como reset --hard, los commits viejos siguen siendo recuperables vía reflog durante 90 días.

Cada entrada del reflog tiene un identificador (HEAD@{0}, HEAD@{1}, ...) que puedes usar como cualquier ref. Si perdiste un commit, git reflog es casi siempre el primer lugar para buscar.

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.

Opciones comunes

Opción / SubcomandoDescripción
show <ref>Display reflog for a ref (default HEAD).
expirePrune old entries.
--expire=<time>Expire entries older than this.
--expire-unreachable=<time>For commits unreachable from any ref.
--allOperate on every ref.
delete <entry>Remove a single entry.

Ejemplos

git reflog
# Recent moves of HEAD

git reflog show feature/api
# Just the feature branch's history

git reset --hard HEAD@{1}
# Recover from a wrong reset by going back one move

git reflog expire --expire=30.days --all
# Trim reflog to last 30 days for every ref

Errores comunes

Reflogs are LOCAL only — fetching from a remote does not include their reflog. Reflog entries expire eventually; don't rely on them for long-term recovery. Running git gc --prune=now after expiring the reflog can permanently remove unreachable commits.

Comandos relacionados

git reset, git rebase, git fsck, git gc