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

Introducción

git log recorre el grafo de commits desde un punto de partida (predeterminado: HEAD) hacia atrás a través de los padres, mostrando cada commit. Es la herramienta principal para explorar el historial del proyecto.

Uso básico

git log
git log --oneline
git log --oneline --graph --decorate --all

La última forma es la vista navaja suiza: un grafo compacto de cada branch con refs decoradas.

Filtrando por fecha, autor, mensaje

git log --since="2 weeks ago"
git log --until=2025-01-01
git log --author="Ada"
git log --grep="bugfix"
git log -S "deprecated_function"   # pickaxe: ¿cuándo apareció una cadena?

-S es invaluable para arqueología: encuentra commits que cambian el número de ocurrencias de una cadena en cualquier archivo.

Mostrando diffs

git log -p                 # patch completo por commit
git log --stat             # archivos cambiados más conteos +/-
git log --shortstat        # solo línea de resumen
git log -p -- path/to/file # solo commits que tocan una ruta

Formatos personalizados

--pretty=format: acepta marcadores. Una línea útil:

git log --pretty=format:"%h %an %ad %s" --date=short

%h hash abreviado, %an nombre del autor, %ad fecha del autor, %s asunto. Mira git help log para la lista completa.

Límites y rangos

git log -n 5                       # últimos 5 commits
git log main..feature              # commits en feature que no están en main
git log main...feature             # diferencia simétrica
git log feature ^main              # equivalente a main..feature

Siguiendo renombres de archivos

Git no registra renombres, los detecta. Para seguir el historial a través de un renombre:

git log --follow -- path/to/file

Alias útiles

Un puñado de alias de git log se pagan solos en la primera semana. Dos especialmente buenos:

git config --global alias.lg "log --oneline --graph --decorate --all"
git config --global alias.last "log -1 HEAD --stat"
git config --global alias.recent "log --since='2 weeks ago' --author=$(git config user.email)"

git lg da el grafo a vista de pájaro; git last muestra lo que acaba de pasar; git recent responde "¿en qué he trabajado últimamente?". Añade un alias para cualquier invocación de log que escribas más de dos veces.

Inverso y limitado

Por defecto git log recorre del más nuevo al más antiguo. A veces (notas de versión, arqueología de código) quieres lo opuesto, emparejado con un formato limpio:

git log --reverse --oneline v1.0.0..v1.1.0
git log --reverse --pretty=format:"* %s (%h)" v1.0.0..HEAD > CHANGELOG.draft

Aquí también es donde pickaxe y los filtros de ruta se ganan su sueldo: git log --reverse -S "old_api" -- src/ muestra el historial cronológico de la aparición y desaparición de una cadena, perfecto para rastrear deprecaciones.

Errores comunes

Leer solo el historial de HEAD y perderse commits en otros branches; pasa --all para verlos. Confundir --author (un regex sobre el campo de autor) con una coincidencia literal exacta; entrecomilla el patrón con cuidado. Usar git log file en lugar de git log -- file: el separador -- distingue rutas de refs, especialmente si un branch y un archivo comparten nombre. Finalmente, esperar que git log muestre commits eliminados después de un force-reset; usa git reflog para eso. git log solo recorre historial alcanzable.