Cómo agrupar commits en uno solo al hacer merge a otra rama git.
En nuestro día a día como desarrolladores, muchas veces nos encontramos revisando commits que podrían haberse resumido o incluso evitado. En proyectos colaborativos —especialmente cuando trabajamos con ramas feature— esto se vuelve evidente. Aquí entra en juego git merge --squash
, una herramienta útil para simplificar el historial sin perder el trabajo realizado en una rama.
Esta opción de git merge es una forma de aplanar commits (de ahí el término squash, que significa aplastar o comprimir) utilizando comandos como git merge --squash
.
Este comando permite combinar los cambios de una rama en otra como si todo fuera un solo commit, sin hacer un merge tradicional. No se fusionan los historiales de ambas ramas; simplemente, los cambios se aplican y luego podemos crear un único commit que los represente.
git merge --squash
?Hay varias razones por las que podríamos querer agrupar varios commits en uno solo antes de integrarlos a la rama principal:
main
, el historial se llena de ruido.Imaginemos que trabajamos en una rama llamada feature/login
que está compuesta por 10 commits. Mientras hemos estado desarrollando la funcionalidad, muchos de estos commits son pequeños y poco importantes, corregir errores de sintaxis, importar librerías, etc… Y lo que realmente nos importa es que al hacer merge de la rama a main
quede un sólo commit con todos los cambios y un mensaje claro. Para ello ejecutaremos estos comandos:
# Nos movemos a maingit checkout main
# Traemos los cambios de feature/login, pero sin fusionar los historialesgit merge --squash feature/login
# Creamos un único commit con todos los cambiosgit commit -m "Añade funcionalidad de login"
Al ejecutar git merge --squash
, Git no hace un merge como tal, sino que aplica los cambios de la rama como staged changes (preparados para commit). Luego decidimos si queremos comitear todo, modificar algo o incluso descartar.
Podemos ver el resultado de este merge con:
git status
Ahí nos mostrará los archivos modificados, listos para ser comiteados. Nada se ha registrado aún en el historial, lo que nos da margen para revisar y decidir.
git merge --squash
es una herramienta útil cuando queremos integrar cambios sin complicar el historial. No es la única forma de hacer squash, pero es directa y fácil de entender. Nos permite mantener ramas limpias, sin perder el trabajo que hicimos.
No se trata de ocultar lo que hicimos, sino de presentar los cambios de forma clara y resumida. A veces un solo commit bien descrito dice mucho más que diez commits intermedios.
¿Lo mejor? Podemos combinar este enfoque con buenas prácticas de revisión de código, asegurando que el código que llega a main
sea fácil de leer y de mantener.