¿Cómo hacer squash en Git?
Hay dos maneras que conozco de hacer squash, en éste post les enseñaré las dos maneras. Pero primero les diré la definición de Squash
¿Qué es Squash? #
Hacer squash en Git, (“comprimir”), hace que nuestra rama a mergear (a la que haremos un pull request) se componga de un solo commit de esta manera mergearemos un solo commit de código a nuestra rama de desarrollo que contendrá una funcionalidad completa.
Ahora sí, a los pasos #
Parado en la branch que queremos hacer squash, ahora en la consola haremos
git log
retornará
Algo así, de ahí vamos a copiar el hash que está arriba de origin/main, main
en mi caso es este b6adbbcd8f99935113cf1e24943736fb2c501e26
Luego vamos a hacer rebase
git rebase -i TU-HASH
en mi caso es
git rebase -i b6adbbcd8f99935113cf1e24943736fb2c501e26
Te va a mostrar algo así, te abrirá el editor VIM
Tendrás que remplazar todos las lineas que dice pick
por squash
o s
excepto el la primera línea
Para escribir en VIM deberás darle a la tecla
i
Quedará así
Luego presionaremos dos veces la tecla Esc
al hacer eso, deberás escribir :wq
y darle enter
Ahí pasará a pedirte el mensaje final para el commit comprimido
Colocas el mensaje, pulsando i
para escribir, luego presionas dos veces Esc
y escribes :wq
Y listo, ya hiciste Squash
Ahora debes para subirlo a tu repositorio, basta con escribir
git push -f
Y listo, ya estaría listo
La otra manera de hacer Squash #
Para ello, parado en la rama para hacer squash, se coloca
git reset --soft TU-HASH
Anteriormente expliqué como se obtiene el hash
Luego harás
git commit --amend
Se abrirá el editor VIM, para colocar el mensaje final del commit, presiona i
para escribir
Luego presionas Esc
y escribes :wq
para guardar y salir
Ahora con
git push -f
Se subiría tus cambios a tu repositorio
Si haces git log
ahora, deberías de tener 1 solo commit encima de origin/main
con el nombre que le diste en ammend
Por nada hagas
git reset --hard
al menos de que quieras borrar todo tu progreso
Extras #
Recomiendo usar Conventional Commits para tu mensajes de commit