Hola a todos de nuevo, seguimos con nuestra sección practica sobre git con un comando fundamental para el día a día en el desarrollo de funcionalidades en equipo, se trata del git stash.
Muy a menudo nos encontramos con el problema de que tenemos un desarrollo a medio hacer y queremos mezclar código de otro compañero. Imaginemos que estamos trabajando en nuestra rama work y queremos bajarnos cambios de master. Git no permitirá cambiarnos de rama ya que detecta que tenemos cambios sin commitear. La solución inmediata (y errónea) sería hacer un commit en work con código inestable, cambiar a master, bajarnos los cambios y hacer un rebase desde work. Esto es claramente un error, no debemos hacer ningún commit que contenga código inestable puesto que podría ser usado indebidamente en el futuro por alguien del equipo.
La solución se llama git stash. Este comando de git nos permite almacenar cambios no commiteados en una pila en la propia rama. Es decir, al hacer git stash la rama se queda en el estado del último commit y mete en una pila los cambios no commiteados. De esta manera, podríamos hacer todo el proceso de mezclado sin conflictos. Una vez mezclado el código podríamos hacer git stash pop para aplicar los cambios de la pila y seguir trabajando por donde íbamos.
Como hemos comentado arriba, git stash provee una pila de cambios, así que se pueden ir apilando cambios con git stash (o git stash save) y desapilando (aplicando) con git stash pop. Es una herramienta potente pero que hay que usar con cuidado, yo no aconsejo apilar más de una vez puesto que podemos fácilmente perder el hilo de los cambios a aplicar. Para listar los elementos de la pila se usa git stash list, para borrar (descartando los cambios) el último elemento apilado tenemos git stash drop y para borrar todos los elementos de la pila git stash clear.
Para una mayor información y opciones podéis consultar la ayuda de git stash aquí.
Y recordad, keep calm and git stash 😉
Un saludo
Jose A. Ródenas «rodio»
CTO en Visualtis S.L.