¿Por qué usar fixup?
Cuando trabajas en una rama y encuentras un bug en un commit anterior, en lugar de crear un commit separado “Fix typo” o arreglarlo en otro commit posterior, usas fixup para marcarlo como corrección de ese commit específico.
Fixup básico
# 1. Haces cambios para corregir un commit anterior
# 2. Identificas el hash del commit a corregir
git log --oneline
# a1b2c3d feat: add user authentication
# 3. Creas el fixup commit
git add .
git commit --fixup a1b2c3d
# 4. Verificas
git log --oneline
# e5f6g7h fixup! feat: add user authentication
# a1b2c3d feat: add user authentication
Autosquash en rebase
# En lugar de editar manualmente el rebase interactivo
# Git coloca automáticamente el fixup junto a su target
git rebase -i --autosquash HEAD~5
# En el editor, verás:
# pick a1b2c3d feat: add user authentication
# fixup e5f6g7h fixup! feat: add user authentication
# pick b2c3d4e feat: add email validation
# Sin --autosquash, tendrías que moverlo manualmente
Alias recomendado
git config --global alias.fixup '!git add -A && git commit --fixup'
git config --global alias.squash 'rebase -i --autosquash'
Uso:
git fixup a1b2c3d
git squash HEAD~5
Cuándo usarlo
| Situación | Solución |
|---|---|
| Bug en commit de hace 3 pasos | git commit --fixup <hash> + autosquash |
| Quieres mantener historial limpio | Fixup en vez de “fix error” |
| Code review con cambios pequeños | Fixup + rebase antes de merge |
| PRs con múltiples correcciones | Fixup cada ronda de review |
No uses fixup en commits que ya están en main o en ramas compartidas.