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

Por qué el rebase interactivo

El rebase interactivo reescribe una secuencia de commits en una historia más limpia y significativa antes de publicar. Es el instrumento quirúrgico de Git: puedes reordenar, editar, hacer squash, fixup, descartar, reescribir o dividir commits, todo en una sola sesión guiada. Dominarlo transforma una rama local desordenada en una historia que los revisores pueden seguir.

La lista de tareas

Ejecutar git rebase -i abre un editor con una lista de tareas. Cada línea tiene un verbo y un commit. Reordena las líneas para reordenar los commits. Cambia los verbos para cambiar el comportamiento.

git rebase -i HEAD~5

Los verbos incluyen pick (usar commit), reword (editar solo el mensaje), edit (detenerse para enmendar), squash (combinar con el anterior, conservar ambos mensajes), fixup (combinar, descartar el mensaje), drop (eliminar) y exec (ejecutar un comando shell entre commits). Dos verbos más recientes son break (pausar incondicionalmente) y label/reset/merge para el grafo de merge del rebase (desde Git 2.18).

Dividir un commit

Marca el commit con edit, luego deshaz y vuelve a hacer commit:

git reset HEAD^
git add -p
git commit -m "Primer cambio lógico"
git add -p
git commit -m "Segundo cambio lógico"
git rebase --continue

Flujo de autosquash

Cuando detectas un error tipográfico en un commit anterior, crea un commit fixup y deja que rebase los ordene automáticamente:

git commit --fixup=<sha>
git rebase -i --autosquash HEAD~10

Configura rebase.autoSquash = true para que sea el predeterminado. Combínalo con rebase.autoStash = true para que los árboles de trabajo sucios no bloqueen el rebase.

Exec para verificación

Usa líneas exec para verificar que cada commit compila y los tests pasan — invaluable para mantener una historia bisectable:

git rebase -i --exec "cargo test" main

Cada commit entre HEAD y main será revisado y se ejecutará el comando. Si falla, rebase se detiene para que puedas arreglar y continuar.

Rebase de merges con --rebase-merges

El rebase tradicional aplana los merges. Pasa --rebase-merges para preservar la topología:

git rebase -i --rebase-merges main

Errores comunes

Hacer rebase de commits publicados obliga a los colaboradores a cirugía de historia. Reserva el rebase interactivo para ramas que solo tú posees, o coordina explícitamente. Olvidar git rebase --continue tras resolver conflictos deja el rebase a medio aplicar. Usa git status — te dice exactamente qué hacer. Finalmente, si destruyes trabajo, git reflog casi siempre lo rescata.

Recuperación

Si un rebase sale mal, aborta y empieza de nuevo:

git rebase --abort
git reflog
git reset --hard HEAD@{5}