Estos últimos años trabajando con diferentes colegas me he dado cuenta de que no todos saben utilizar git más allá de hacer commit y push.
Y si, git tienen infinitas funciones y algunas son absurdamente complejas, pero vale la pena ir un poco más allá con el fin de optimizar tu flujo de trabajo.
Así que entremos en materia.
1. Guarda temporalmente tus cambios
Este sin duda es uno de mis comandos favoritos de git.
Muchas veces me pasa que tengo que cambiar de rama constantemente y es molesto hacer un commit "dummy" para guardar los cambios sin perderlos.
Para evitar esto tenemos el comando de git stash.
Esto es básicamente una pila en donde podemos ir agregando cambios de forma temporal.
Entonces imagínate que tienes unos cambios que hiciste y necesitas cambiar de rama rápidamente, simplemente ejecutas lo siguiente:
Y listo, lo que va a hacer git es crear una pila con esos cambios y entonces se te van a borrar del working directory, por lo que vas a poder cambiar de rama sin problema y tus cambios van a estar a salvo en esa memoria temporal.
Cuando terminaste y quieres sacar los cambios puedes utilizar:
Lo que va a hacer esto es recuperar tus cambios y regresarlos al working directory, pero los va a eliminar de esa memoria temporal.
Para evitar ese comportamiento utiliza:
Con git stash apply vas a poder mantener los cambios en esa memoria temporal y al mismo tiempo vas a poder recuperarlos.
Además, puedes enviarle el index del cambio que quieres recuperar. Recuerda que esta memoria es una pila, entonces el index cero vendría siendo el último cambio que agregaste.
2. Aplica cambios (commits) específicos
Este es otros de los comandos que más me gusta utilizar luego de que lo descubrí.
Hablemos de cherry-pick.
Resulta que este comando sirve para traer commits específicos de otras ramas hacia tu rama.
No hace falta que llenes de basura tu rama con TOOOODOS los commits que vienen de otro lado cuando haces merge.
Para usarlo es bien sencillo, solo necesitas el ID del commit que necesitas. Obviamente este commit debe incluir el cambio que quieres obtener.
Seguramente, si modificaron el mismo archivo que tu vayas a tener que lidiar con conflictos como en un merge, pero va a ser a una escala mucho menor.
3. Explora y encuentra bugs
Este probablemente sea uno de los comandos más locos que tiene git.
Me refiero a: git bisect.
Cuando te enfrentas a un bug que ha surgido en algún punto del historial de tu proyecto, este comando puede ser tu mejor amigo.
Permite hacer una búsqueda binaria a través de tu historial de commits para encontrar exactamente el que introdujo el error.
Supongamos que tenemos un bug en la rama main que está en producción y no sabemos cuando se incluyó ese cambio.
Entonces nos paramos en la rama y vamos a ejecutar lo siguiente:
Lo que estamos haciendo aquí es primero iniciar el proceso de disección para encontrar el commit del problema. Y marcamos como "malo" el commit actual donde estamos parados.
Luego debemos buscar un commit donde sepas que el bug no existía. Podemos incluso seleccionar un commit de hace semanas atrás. Para eso podemos ejecutar lo siguiente:
En este punto, bisect va a cambiar el HEAD por un commit dentro de ese intervalo de tiempo que tenemos y entonces nuestro trabajo va a ser probar el código para decir si el commit actual está correcto o no.
Si nos encontramos con que el commit funciona sin problemas, entonces utilizando git bisect good nuevamente y avanzamos, lo que va a ir pasando es que se van a ir acortando las opciones porque se van descartando commits dentro de esa línea del tiempo y así es como vamos a llegar al commit del problema.
Cuando lo encontremos, finalizamos el proceso con git bisect reset para volver todo a la normalidad.
4. Explora el historial de forma más cómoda
Utilizar el comando de git log parece trivial, pero te voy a mostrar algunas opciones que puedes agregarle para tener un mejor resultado para el análisis.
Es bien sabido que con esto podemos ver TOOODO el historial de commits que se han hecho en el histórico del repositorio, por eso vamos a darle algo de estilo con las siguientes opciones:
Y el resultado es este:
Como ves, es mucho más entendible ver lo que pasó en la historía de tu repositorio.
Y si, el comando que te muestro es muy tedioso de escribir, lo que me lleva al siguiente punto.
5. Configura abreviaturas para tus comandos
Si te encuentras escribiendo los mismos comandos una y otra vez, configurar algunos alias puede ahorrarte mucho tiempo.
Git permite definir abreviaturas personalizadas, pero yo personalmente lo hago utilizando ZSH.
Te muestro un ejemplo:
Para finalizar
A lo largo de nuestra carrera como desarrolladores, continuamente buscamos formas de mejorar y optimizar nuestro flujo de trabajo (al menos yo).
Y Git en particular, ofrece una gama gigante de funcionalidades que cuando se utilizan a su máximo potencial, pueden hacer una diferencia significativa en nuestra eficiencia y colaboración en proyectos.
Nos vemos en la edición #31
Si te sentiste identificado con la necesidad de profundizar en tus conocimientos de git más allá de los comandos básicos, te invito a comenzar implementando estos consejos en tus proyectos actuales y me cuentas que tal.
Recuerda que si quieres hablar de algo en particular puedes sugerir el tema respondiendo este correo.
Hasta pronto 👊🏼
#30 Domina Git con estos consejos
Mejora tus habilidades en git con estos 5 consejos esenciales. Desde el uso avanzado de branches hasta encontrar bugs con bisect, transforma tu flujo de trabajo y colabora como un profesional