Menu
Coddy logo textTech

Git: Aplastar Commits (Squash)

Última actualización

Aplastar (squash) combina varios commits en uno solo, de modo que una serie desordenada de commits "wip", "corregir errata", "ahora sí lo arreglo" se convierte en un único commit limpio. La herramienta habitual es el rebase interactivo - git rebase -i - donde marcas los commits que quieres fusionar. Como aplastar reescribe el historial, hazlo antes de hacer push, o en una rama en la que solo trabajes tú.

Prueba estos comandos en el terminal playground - una shell real en tu navegador, sin necesidad de instalar nada.

El squash pliega una serie de commits pequeños en un solo commit limpio mediante rebase interactivo.

Sintaxis

CommandWhat it does
git rebase -i HEAD~3Rebase interactivo de los últimos 3 commits
git rebase -i mainRebase de cada commit desde main
git merge --squash featureAplasta los commits de una rama en uno solo al hacer merge
git reset --soft HEAD~3 && git commitAplasta los últimos 3 commits sin rebase

Comandos del rebase interactivo

En el editor que se abre, cambia pick por uno de estos.

KeywordWhat it does
pickMantiene el commit tal cual
squash (s)Fusiona con el commit anterior y combina los mensajes
fixup (f)Fusiona pero descarta el mensaje de este commit
reword (r)Mantiene el commit pero edita su mensaje

Ejemplo práctico

Aplasta los últimos tres commits en uno antes de hacer push.

StepActionResult
1git rebase -i HEAD~3Abre los últimos 3 commits en el editor
2Marca los commits 2 y 3 como squashLos marca para fusionarlos con el primero
3Guarda y edita el mensaje combinadoTres commits se convierten en un commit limpio

Preguntas frecuentes sobre aplastar commits en Git

¿Cómo aplasto los últimos N commits en Git?
Ejecuta git rebase -i HEAD~N (por ejemplo HEAD~3 para los últimos tres). En el editor, deja el primer commit como pick y cambia el resto a squash (o fixup para descartar sus mensajes). Guarda, edita el mensaje de commit combinado y los commits se fusionan en uno solo.
¿Cuál es la diferencia entre squash y fixup?
Ambos fusionan un commit con el anterior. squash mantiene el mensaje del commit y te permite combinarlo con los demás en un editor. fixup descarta por completo el mensaje del commit y conserva solo el del commit anterior - útil para commits de "ups, pequeña corrección" que no quieres en el mensaje final.
¿Cómo aplasto una rama entera al hacer merge?
Usa git merge --squash feature y luego git commit. Esto aplica todos los cambios de la rama como cambios preparados (staged) y te permite registrarlos como un único commit en la rama de destino, sin traer los commits individuales de la rama. El botón "Squash and merge" de GitHub hace lo mismo.
¿Puedo aplastar sin un rebase interactivo?
Sí. git reset --soft HEAD~N retrocede la rama N commits manteniendo todos sus cambios preparados (staged), y luego un único git commit los registra como uno solo. Es una forma rápida de aplastar los commits más recientes sin abrir el editor de rebase.
¿Puedo practicar esto en línea?
Sí. Abre el terminal playground para ejecutar el rebase interactivo en una shell real en tu navegador - sin necesidad de instalar nada. El curso interactivo y gratuito de Git de Coddy también cubre el rebase y la limpieza del historial paso a paso.
Coddy programming languages illustration

Aprende Git con Coddy

COMENZAR