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