bash

Git Fixup y Autosquash para commits más limpios

Aprende a usar git commit --fixup y git rebase --autosquash para mantener un historial de commits ordenado sin reescribir manualmente.

2 min
2 jul

¿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ónSolución
Bug en commit de hace 3 pasosgit commit --fixup <hash> + autosquash
Quieres mantener historial limpioFixup en vez de “fix error”
Code review con cambios pequeñosFixup + rebase antes de merge
PRs con múltiples correccionesFixup cada ronda de review

No uses fixup en commits que ya están en main o en ramas compartidas.

Preguntas Frecuentes

¿Qué hace git commit --fixup?

Crea un commit con el mensaje 'fixup! <mensaje>' que Git reconoce como una corrección de otro commit. Cuando haces rebase interactivo con --autosquash, Git automáticamente mueve esos fixup commits a la posición correcta y los fusiona.

¿Git autosquash funciona sin rebase interactivo?

No, necesitas ejecutar git rebase -i --autosquash. Git reorganiza automáticamente los fixup commits junto a sus commits objetivo y los marca como fixup en el editor.

¡Código copiado!