¿Cómo Hacer Squash a Commits en Git?

Hacer squash a commits en Git es una técnica utilizada para combinar múltiples commits en uno solo y más cohesivo. Esto puede ser útil para limpiar tu historial de commits antes de fusionar una rama de características en la rama principal, asegurando que el historial sea conciso y significativo. En este artículo, cubriremos cómo hacer squash a commits utilizando la función de rebase interactivo de Git.

¿Cuándo Hacer Squash a Commits?

El squash de commits se hace a menudo antes de fusionar una rama en la rama principal para crear un historial de commits más limpio y organizado. Es particularmente útil cuando tienes muchos commits pequeños que representan cambios incrementales o correcciones que pueden agruparse lógicamente.

Cómo Hacer Squash a Commits Usando Rebase Interactivo

Paso 1: Iniciar un Rebase Interactivo

Para comenzar a hacer squash a commits, inicia un rebase interactivo ejecutando:

git rebase -i HEAD~n

Reemplaza n con el número de commits que deseas hacer squash. Por ejemplo, si quieres hacer squash a los últimos tres commits, usarías:

git rebase -i HEAD~3

Paso 2: Marcar Commits para Squash

Una pantalla de rebase interactivo se abrirá en tu editor de texto predeterminado, listando los commits a ser rebaseados. Los commits se listarán con la palabra pick al lado de cada uno. Para hacer squash a los commits, deja el primer commit como pick y cambia los otros a squash o s:

pick commit1
squash commit2
squash commit3

Esta configuración le dice a Git que mantenga el primer commit tal cual y que haga squash a los siguientes dentro de él.

Paso 3: Editar el Mensaje del Commit

Después de hacer squash, Git te pedirá que edites el mensaje del commit. Puedes combinar los mensajes de los commits que se hicieron squash en un solo mensaje significativo o escribir uno nuevo que resuma los cambios:

# Esta es una combinación de commits.
# Por favor ingresa el mensaje del commit para tus cambios.

Guarda y cierra el editor para completar el proceso de rebase.

Paso 4: Empujar los Cambios

Si ya has empujado los commits originales a un repositorio remoto, necesitarás forzar el empuje del commit que se hizo squash:

git push --force-with-lease

Usar --force-with-lease es más seguro que --force, ya que verifica que la rama remota no haya sido actualizada por otros antes de empujar.

Mejores Prácticas para Hacer Squash a Commits

  • Usa el Squash para Limpiar: Haz squash a commits para ordenar tu historial antes de fusionarlo a la rama principal, pero evita hacer squash en exceso, ya que cierta granularidad de los commits es valiosa para entender los cambios.
  • Comunícate con Tu Equipo: Si trabajas en equipo, coordínate con los demás antes de forzar el empuje de los commits que se hicieron squash para evitar interrumpir su trabajo.
  • Haz Squash Localmente: Es preferible hacer squash a los commits antes de empujarlos a un repositorio compartido. Esto evita la necesidad de forzar el empuje, lo que puede afectar a tus colaboradores.

Conclusión

Hacer squash a commits en Git es una técnica útil para mantener un historial de commits limpio y legible. Al usar rebase interactivo, puedes combinar múltiples commits relacionados en un solo commit significativo que comunique claramente el propósito de tus cambios.