DEV Community

Cover image for Git rebase & squashing
JPGallegos1
JPGallegos1

Posted on

Git rebase & squashing

La semana del 1ro de Febrero fue muy importante para mí dado que la empresa Double Point confió en mis aptitudes para desempeñarme como Frontend Developer, lo cual agradezco muchísimo y estoy muy contento.

Pero más allá de todo lo que implica un nuevo trabajo, esta semana mi líder Mati me enseñó algo muy importante relacionado a Git, lo cual me parece fundamental a la hora de trabajar en equipo y mantener la calidad en los commits: git rebase.

Hago un apartado y sugiero que tengan instalada la extensión de VSCode llamada GitLens, que nos será de utilidad en un rato

Cuando vemos que una tarea nos está llevando determinado tiempo y cantidad de commits, es cuando vamos a considerar llamar a un gran amigo como es git rebase. Podemos decir que git rebase es como la unificación de un commit padre con sus commits hijos. Haciendo git log, veamos el siguiente historial de commits:

alt text

Aquí nosotros estamos utilizando:

  • Tres ramas: master > develop > feature/replace
  • La más afectada es feature/replace con cuatro commits, la cual en principio es nuestra tarea y la modificamos a medida que hacemos cambios pequeños.

Ahora nos vamos a concentrar en el primero de los commits de la rama feature/replace: feat: se implementó la lógica con el método replace

En este caso, la estructura del commit padre es simple: [tipo]:[descripción]

Si nunca han trabajado con tipos de commits, háganse una idea que puede ser algo como "style: cambios de background al body" o "fix: se corrigió la función getUser() que devolvía null", por poner ejemplos sencillos

Sabiendo de que mantenemos nuestro commit padre o commit principal con esta estructura, cada nuevo commit que hagamos pre rebase, lo pueden guardar como más les guste o convenga porque no es algo que nuestres compañeres vayan a ver. Todo se va a quedar en: feat: se implementó la lógica con el método replace

¡Hagamos rebase!

En este caso el comando final que vamos a utilizar para hacer rebase es git rebase -i HEAD~4. Explico:

  • El parámetro -i: es para que al hacer un rebase de varios commits te lleve a un editor donde podes decidir que hacer con cada commit
  • HEAD~4: con esto le decimos que sobre la rama actual queremos seleccionar los últimos 4 commits (commit principal y sus tres hijos). En caso de haber más cantidad de commits hijos, se debe cambiar el número.

Ejecutando esto, el VSCode se abrirá automáticamente (gracias a la extensión GitLens) y obtendremos una ventana como esta:

alt text

¡Perfecto! Ya casi está. Ahora vamos a seleccionar squash para poder unificar los commits. Después de eso, click al botón de start rebase.

alt text

Por último, se nos abrirá esta ventana donde básicamente nos dice que podemos ignorar ciertos commits si los comentamos con un #
alt text

Dejamos descomentado sólo el commit principal y el que verán los demás integrantes del equipo. Finalizamos guardando con Ctrl + S

alt text

Conclusión

git-rebase puede ser un arma extremadamente poderosa y útil para nuestro día a día, permitiéndonos hacer tantos commits como queramos para luego emprolijar y unificar todo en uno.

Pro tips:

  • Santiago Santana, Software Specialist: "Debemos evitar hacer rebase de commits pusheados en una rama que vean otros miembros del equipo, dado que no podrán pullear ni mergear por el cambio de historia"

Top comments (0)