¡Hola hola! Soy Juan Ramón González Morales, artesano del software desde Jaén. Aquí estamos con un nuevo post. Este nuevo post trata de limpiar el historial de commits sin git rebase y usando git merge con la opción –squash. Ésta es una de las buenas prácticas para trabajar con git, se debería de tener un único commit claro y descriptivo por tarea.
Podemos usar los alias de git para consola.
Esto nos va a permitir tener un historial de commits limpio y conciso en nuestro proyecto. Sin duda, hay tareas que necesitan más de un commit durante su desarrollo, por esa razón, hay que utilizar técnicas para limpiar el historial.
Bien, vamos a explicar un poco más acerca de git rebase y de cómo limpiar el historial de commits en git.
Git rebase para limpiar el historial de commits
Bien, ahora, ¿qué es git rebase?
Git rebase es una de las ordenes a git más importantes. Nos permite reescribir el historial de commits y tener un historial limpio, aunque debemos de tener cuidado al modificar el historial de commits en nuestro repositorio. Esto nos proporciona el beneficio posterior de una fusión limpia de la rama de función de nuevo a la rama base.
Un ejemplo perfecto del uso de git rebase es el siguiente. En el cual, veremos la utilidad de git rebase.
Piensa en una situación en la que la rama base ha progresado desde que empezaste a trabajar en una rama de tarea. En algún momento se quieren incorporar las últimas actualizaciones de la rama base en la rama de tarea para que parezca que hemos empezado a trabajar desde la rama base más reciente, sin embargo, quieres mantener el historial de la rama limpio.
Otro uso de git rebase es hacer squash, esto es juntar todos los commit de la tarea en un único y descriptivo commit para la tarea. Esto nos permite tener un historial limpio en nuestro repositorio. Por mi parte, para tareas con más de un commit, una vez realizadas lo ideal es dejar un único commit con un mensaje descriptivo de la nueva funcionalidad añadida. Tener un solo commit es una buena práctica, además nos ayuda a organizar nuestras ramas de git.
El código que os pongo en el post se puede hacer más óptimo, entonces, usando alias para git.
Rebasear sin hacer rebase y mejorar el historial de commits
Bien, ahora voy a explicar una manera de hacer un rebase sin hacerlo explícitamente, en concreto vamos a usar git merge con la opción –squash. Hay veces que los desarrolladores, por la razón que sea, le tienen miedo a usar rebase y reescribir historial de commits de su proyecto.
Para ello, debemos de seguir los siguientes pasos:
Actualizar la rama base de nuestro proyecto
git checkout main
git pull
Lo primero, y principal, es obtener la versión más reciente de nuestra rama base, en este caso concreto, será la rama main.
Crear una rama dev
git checkout -b feature-branch-dev
Se trabajará sobre la rama dev, como si fuera nuestra rama principal de tarea, y se crearan los commit necesarios para nuestra nueva funcionalidad.
Crear la rama de tarea
git checkout main
git checkout -b feature-branch
Ahora, nuestro siguiente paso será, crear la que será nuestra rama de tarea definitiva, a partir de la rama base.
Merge de la rama dev con la rama definitiva
git merge --squash feature-branch-dev
Commit y push de la rama definitiva
En la nueva rama creada, ya podemos hacer el commit con los cambios traídos de feature-branch-dev en un único commit con un mensaje descriptivo y subir los cambios a nuestro repositorio con un git push de nuestra rama feature.
Si estamos trabajando con tests y creamos una rama de tests también sería importante limpiar el historial.
Puedes aprender más de tests automáticos y qué es la pirámide de tests automáticos desde el enlace que hay en este párrafo.
Resumen
Hemos visto como podemos usar git merge para hacer squash y rebase de los commit, así como una nueva manera, ni mejor ni peor, simplemente diferente de trabajar con ramas y de tener el historial limpio. Aunque por mi parte, siempre aconsejaría trabajar directamente con git rebase, este workaround usando git merge y la opción –squash también es algo conveniente de aprender.
Enlaces y referencias
https://williamdurand.fr/2021/02/02/rebasing-without-git-rebase/
https://www.atlassian.com/es/git/tutorials/rewriting-history/git-rebase
https://git-scm.com/docs/git-rebase
Comparte 🙂
Si te ha gustado el contenido de este artículo no te olvides de compartirlo ya que con eso me harías muy feliz. GRACIAS 😉
Participa 😉
Además de todo ello, si tienes dudas o puedes aportar algo con un comentario, no dudes en hacerlo. GRACIAS 😉