Comandos de Git

git reflog

git reflog: muestra el log de referencias, con las actualizaciones de la punta de las ramas y otras referencias.

Git registra cada movimiento de HEAD y de tus ramas en el reflog, así que este comando es la forma más rápida de ver dónde apuntaba antes una referencia y rescatar un commit que ya no pertenece a una rama evidente. El registro existe solo en tu ordenador local, lo que lo hace perfecto para deshacer errores en tu repositorio clonado actual sin afectar a nadie del equipo ni a otras personas que colaboren en el proyecto.

Ejemplo

Ejecuta en la terminal:
git reflog
Resultado:
a7f3c9b (HEAD -> feature/api-refactor) HEAD@{0}: commit: Add error handling middleware
b12ad6f HEAD@{1}: commit: Refactor API routes and controllers
e93b4c2 HEAD@{2}: rebase -i (finish): returning to refs/heads/feature/api-refactor
e93b4c2 HEAD@{3}: rebase -i (pick): Clean up old utility functions
a57de29 HEAD@{4}: checkout: moving from main to feature/api-refactor
c1a9f3b (tag: v1.4.2, origin/main, main) HEAD@{5}: merge feature/dashboard: Merge made by the 'ort' strategy.
5b8f021 HEAD@{6}: commit: Update CHANGELOG and bump version
0cf2a11 HEAD@{7}: tag: v1.4.2: tagging version 1.4.2 release
fd61b7b HEAD@{8}: commit: Fix dashboard layout issues on Safari
a28c90c HEAD@{9}: checkout: moving from hotfix/security-patch to main
f4e35ad (hotfix/security-patch) HEAD@{10}: commit: Patch XSS vulnerability in comments
9e0cd43 HEAD@{11}: checkout: moving from main to hotfix/security-patch
a28c90c HEAD@{12}: pull origin main: Fast-forward
f01d1a2 HEAD@{13}: commit: Improve documentation for API usage
e712d8e HEAD@{14}: reset: moving to HEAD~1
f8d7a1b HEAD@{15}: commit (amend): Update README.md with new badges
b19d2aa HEAD@{16}: commit: Add README.md
eac51bb (tag: v1.4.1) HEAD@{17}: checkout: moving from feature/login to main
b9d0f4c HEAD@{18}: commit: Fix login redirect loop
fa8c121 HEAD@{19}: checkout: moving from main to feature/login
a28c90c HEAD@{20}: merge origin/main: Fast-forward
 

La lista está ordenada en orden cronológico inverso, con la acción más reciente arriba. Vamos a desglosar las primeras entradas:

  1. Hash del commit al que apuntaba HEAD después de esta acción (a7f3c9b, b12ad6f, etc.)
  2. Nombres de referencias opcionales de las ramas o etiquetas que apuntan ahora mismo a ese commit (feature/api-refactor, main, v1.4.2, etc.)
  3. Referencia del reflog: el identificador numerado (por ejemplo, HEAD@0, HEAD@1) que puedes usar para volver a este punto exacto del historial de HEAD.
  4. Descripción de la acción: una nota breve que describe la operación que movió HEAD a este commit (por ejemplo, commit, checkout, merge, rebase (finish), etc.)

Ejemplos

Listar el historial reciente de movimientos de HEAD en el repositorio:

git reflog

Restablecer la rama actual al estado que tenía hace dos movimientos usando la referencia del reflog:

git reset --hard HEAD@{2}

Restablecer la rama actual al estado en el que estuviera la rama main en un momento concreto, suponiendo que el reflog contenga una entrada para ese momento, como yesterday:

git reset --hard main@{yesterday}