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

Qué es una ref

Una ref es un nombre que apunta a un objeto — usualmente un commit. Las branches son refs bajo refs/heads/, los tags bajo refs/tags/, los remote-tracking bajo refs/remotes/, y pseudo-refs como HEAD, FETCH_HEAD, ORIG_HEAD viven en la raíz de .git.

Inspeccionar refs

git for-each-ref
git for-each-ref --sort=-committerdate --format='%(refname:short) %(committerdate:relative)' refs/heads
git symbolic-ref HEAD
git update-ref refs/heads/foo <sha>

El reflog

Cada cambio a una ref se registra: movimientos del tip de la branch, commits, resets, rebases, fetches. El reflog es una red de seguridad por clone independiente del grafo de objetos.

git reflog
git reflog show feature
git reflog show HEAD@{2.weeks.ago}
git log -g --oneline

Recupera un commit "perdido":

git checkout HEAD@{1}
git branch rescue HEAD@{5}

Expiración del reflog

git config gc.reflogExpire never
git config gc.reflogExpireUnreachable 60.days

Pseudo-refs especiales

HEAD apunta a la branch actual. ORIG_HEAD registra el tip anterior antes de operaciones destructivas. FETCH_HEAD registra los tips fetched. MERGE_HEAD existe durante un merge en progreso.

Backend reftable

git init --ref-format=reftable

Errores comunes

Confiar en el reflog para siempre: caduca. Editar .git/refs/ a mano: usa git update-ref para atomicidad. Confundir HEAD@{2} (índice del reflog) con HEAD~2 (ancestría de commits).