Git Squash Commits: Combina Múltiples Commits en Uno
En el mundo del desarrollo de software, Git se ha convertido en la herramienta de control de versiones más popular. Git te permite realizar un seguimiento de los cambios en tu código, revertir a versiones anteriores y colaborar con otros desarrolladores. Sin embargo, a medida que trabajas en un proyecto, tu historial de commits puede volverse desordenado y difícil de leer. Aquí es donde entra en juego git squash.
Git squash es una poderosa técnica que te permite combinar múltiples commits en uno solo, lo que ayuda a simplificar tu historial de commits y mantenerlo limpio. Esto es especialmente útil cuando tienes una serie de commits pequeños que representan un cambio único y quieres consolidarlos en un commit más significativo. En este artículo, exploraremos dos métodos comunes para realizar git squash: rebase interactivo y merge con –squash.
Git Squash con Rebase Interactivo
El método de rebase interactivo te ofrece un control completo sobre tus commits. Puedes editar los mensajes de commit, eliminar commits no deseados, reorganizar commits y, lo más importante, usar git squash para combinar varios commits en uno.
Pasos para usar Rebase Interactivo
-
Identifica los commits que deseas combinar: Ejecuta el comando
git logpara ver tu historial de commits. Decide cuántos commits deseas combinar en uno. -
Inicia un rebase interactivo: Ejecuta el comando
git rebase -i HEAD~N, dondeNes el número de commits que deseas rebasar. Por ejemplo,git rebase -i HEAD~3rebasará los últimos 3 commits. -
Edita el archivo de rebase: Git abrirá un editor de texto que mostrará una lista de los commits que vas a rebasar. Cada commit estará representado por una línea que comienza con
pick,squash,fixup,reword,edit,drop,execos(abreviatura de squash). -
Usa
squashpara combinar commits: En la lista de commits, cambiapickasquashpara cada commit que deseas combinar con el commit anterior. Deja el último commit que deseas mantener comopick. -
Guarda y cierra el editor: Una vez que hayas configurado el archivo de rebase, guarda y cierra el editor. Git aplicará las instrucciones que has especificado y te pedirá que escribas un mensaje de commit para el commit combinado.
-
Escribe el mensaje de commit: Escribe un mensaje de commit que describa los cambios que se realizaron en los commits combinados.
-
Aplica los cambios: Después de escribir el mensaje de commit, presiona enter y Git aplicará los cambios a tu rama actual.
Ejemplo de Rebase Interactivo
«`
git log
commit 9876543210
Author: John Doe john.doe@example.com
Date: Tue Oct 26 14:53:15 2023 +0100
Fix: Typo in documentation
commit 1234567890
Author: John Doe john.doe@example.com
Date: Tue Oct 26 14:45:15 2023 +0100
feat: Add new feature
commit 0000000000
Author: John Doe john.doe@example.com
Date: Tue Oct 26 14:36:15 2023 +0100
Fix: Bug in the code
git rebase -i HEAD~3
pick 0000000000 Fix: Bug in the code
squash 1234567890 feat: Add new feature
squash 9876543210 Fix: Typo in documentation
«`
En este ejemplo, estamos rebasando los últimos 3 commits. El primer commit se deja como pick, mientras que los dos commits siguientes se cambian a squash. Esto hará que los dos últimos commits se combinen en uno solo, con el mensaje de commit del primer commit.
Git Squash con Merge
El método merge con la bandera --squash es más sencillo que el rebase interactivo, pero ofrece menos control. Si necesitas combinar rápidamente varios commits en uno solo y no necesitas editar el mensaje de commit o realizar otras operaciones, este método es adecuado para ti.
Pasos para usar Merge con –squash
-
Crea una rama temporal: Crea una nueva rama temporal desde la rama donde se encuentran los commits que deseas combinar.
-
Realiza un merge con –squash: Realiza un merge con la rama temporal en la rama de destino, usando la bandera
--squash. Esto combinará todos los commits en la rama temporal en un commit único en la rama de destino. -
Escribe el mensaje de commit: Git te pedirá que escribas un mensaje de commit para el commit combinado.
-
Aplica los cambios: Después de escribir el mensaje de commit, presiona enter y Git aplicará los cambios a tu rama actual.
Ejemplo de Merge con –squash
«`
git checkout -b feature-branch
… realiza cambios en la rama feature-branch
git checkout main
git merge –squash feature-branch
«`
En este ejemplo, estamos creando una rama temporal llamada feature-branch y realizando algunos cambios. Luego, regresamos a la rama main y realizamos un merge con feature-branch usando la bandera --squash. Esto combinará todos los commits en la rama feature-branch en un único commit en la rama main.
Beneficios de Git Squash
Git squash ofrece varios beneficios para tu proceso de desarrollo:
-
Historial de commits más limpio: Elimina los commits innecesarios, lo que hace que tu historial de commits sea más legible y fácil de entender.
-
Commits más significativos: Combina los commits relacionados en un solo commit que representa un cambio completo.
-
Mejor colaboración: Facilita la colaboración con otros desarrolladores, ya que les permite comprender mejor los cambios que se realizaron.
-
Mejor capacidad de mantenimiento: Simplifica la revisión del código, ya que puedes ver los cambios importantes en un solo commit.
Consideraciones para Git Squash
Aunque git squash es una técnica útil, hay algunas consideraciones a tener en cuenta:
-
Pérdida de información: Squashing commits elimina el historial de commit individual, por lo que puede dificultar la identificación de los cambios específicos que se realizaron.
-
Posibles conflictos de merge: Si se realizan cambios en la misma línea de código en diferentes commits que se están combinando, puede haber conflictos de merge.
-
Revertir cambios: Revertir un commit squashed puede ser más difícil, ya que todos los cambios están en un solo commit.
Resumen
Git squash es una técnica esencial para mantener un historial de commits limpio y organizado. Te permite combinar varios commits en uno solo, simplificando el historial de commits y mejorando la legibilidad del código. Al utilizar los métodos de rebase interactivo y merge con --squash, puedes aprovechar al máximo esta técnica y mejorar tu flujo de trabajo de desarrollo.