Sinopsis
git rebase -i <upstream>
git rebase -i --root
Descripción
El rebase interactivo (git rebase -i) abre un editor con la lista de commits a rebasear, permitiéndote reordenar, editar, squashear, descartar o renombrar mensajes. Es la herramienta más poderosa para limpiar el historial local antes de pushear.
Las acciones comunes (pick, reword, edit, squash, fixup, drop) están listadas en la cabecera del archivo. Combinado con --autosquash, los commits fixup se ordenan automáticamente.
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 | Descripción |
|---|---|
-i | Interactive editor for rebase plan. |
--autosquash | Auto-arrange fixup/squash commits. |
--root | Rebase from the very first commit. |
-x <cmd> | Run a command between commits (e.g. tests). |
-r, --rebase-merges | Preserve merge commits. |
--continue | Resume after resolving. |
--abort | Cancel completely. |
Ejemplos
git rebase -i HEAD~5
# Edit the last 5 commits
git commit --fixup abc123
git rebase -i --autosquash abc123^
# Add a fixup, then auto-squash on rebase
git rebase -i -x "npm test" main
# Run tests after each commit during rebase
git rebase -i --root
# Rewrite history from the first commit
Errores comunes
Saving an empty rebase todo list aborts the operation — leave at least one pick line. Marking too many commits as edit creates a tedious sequence of stops; prefer squash or fixup when you just want to combine. Never interactive-rebase commits that are already pushed and shared.
Comandos relacionados
git rebase, git commit --fixup, git cherry-pick, git reflog