El comando Stash para cambios rápidos en un proyecto en Git

Pongámonos en situación, somos varios programadores y maquetadores que estamos trabajando en un proyecto gestionado por Git. Estamos desarrollando diferentes funcionalidades que se trabajan en ramas específicas y separadas, para no bloquear u ocasionar ningún tipo de bloqueo en el desarrollo de distintas tareas.

Partiendo de esta premisa, puede surgir la necesidad de cambiar de rama de forma urgente cuando estamos a medio desarrollo de una funcionalidad.

stash command lineEn Runroom trabajamos actualmente tres equipos de producción, cada uno involucrado en diferentes proyectos de gran envergadura. Por ello no es extraño encontrarnos en esta situación durante el proceso de desarrollo en nuestros proyectos.

Un ejemplo más concreto podría ser… bug en producción mientras estamos a medio desarrollo de una funcionalidad de e-commerce en nuestro entorno local.

Nos encontramos ante la necesidad de dejar los cambios en los que estamos trabajando y pasar a otra rama para tratar el bug, pero no queremos comitear el código que tenemos a medias, ¿Qué podemos hacer en este caso?

La solución es muy sencilla, Git Stash está para ayudarnos.

Git Stash ¿de qué se trata?

Se trata de un comando que “congela” el estado en el que se encuentra el proyecto en un momento determinado, con todos los cambios que tenemos a “sin comitear”, y lo guarda en una pila provisional brindando la posibilidad de poder recuperarlo más adelante.

Siguiendo con nuestro ejemplo, lo que haríamos es guardar los cambios que hemos hecho con git stash, esto deja el working tree limpio y nos permite cambiar de rama sin problema. Una vez solucionado el bug, volveríamos a nuestra rama y recuperaríamos nuestros cambios con git stash apply.
gitstash working tree

Funcionamiento de Git Stash

Veamos su funcionamiento en la línea de comandos. Comprobamos el estado actual del working tree:

$ git status
On branch feature/ecommerce
Changes not staged for commit:
 (use “git add <file>…” to update what will be committed)
 (use “git checkout — <file>…” to discard changes in working directory)

       modified:   src/Controller/EcommerceController.php

 

Tenemos sin comitear algunos cambios en el controlador del e-commerce. Los guardamos en la pila:

$ git stash

Si comprobamos ahora el estado del proyecto veremos que el working tree está limpio y nuestros cambios están en la pila de git stash:

$ git status
On branch feature/ecommerce
nothing to commit, working tree clean

$ git stash list
stash@{0}: WIP on feature/ecommerce: 049d078 Add multi currency support

 

En este punto ya podemos cambiar de rama para solucionar el bug que tenemos en producción, seguramente creando una nueva rama hotfix.

Una vez solucionado el problema queremos seguir con lo que estábamos haciendo, es hora de recuperar los cambios en los que estábamos trabajando.

$ git stash apply

En este momento tendríamos nuestro working tree tal y como lo dejamos, con nuestros cambios sin comitear, listo para que podamos continuar el desarrollo de la nueva funcionalidad y comitearla una vez la tengamos acabado.

Si tuviésemos más de un cambio guardado en la pila de git stash, podríamos aplicar cualquiera de ellos especificándolo en la línea de comandos.

$ git stash list

stash@{0}: WIP on feature/ecommerce: 049d078 Add multi currency support
stash@{1}: WIP on development: 3d89ac1
stash@{2}: WIP on development: 21d80a5

$ git stash apply stash@{2}

También podemos borrar los cambios guardados que no vayamos a querer recuperar:

$ git stash drop

Git Stash Pop

Otro comando que resulta muy útil es git stash pop. Nos permite recuperar los cambios recién guardados y borrarlos del stash a la vez:

$ git stash pop
$ git stash list
stash@{0}: WIP on development: 3d89ac1
stash@{1}: WIP on development: 21d80a5

 

Sin duda se trata de uno de los comandos más útiles de git y nos puede ayudar en el día a día cuando tengamos que cambiar de rama de forma inesperada o cuando queramos llevarnos los cambios que tengamos sin comitear a otra rama.

 

Esperamos esta información te ayude a resolver algunos de los problemas con los que tu equipo se puede encontrar trabajando en Git. Nos encantará escuchar tu experiencia a través de los comentarios de este post.

La imagen de cabecera es de Christy Mills


¡Únete a nuestro equipo!

Buscamos Junior Back-end Web Developer

Con experiencia mínima de 2 años en Desarrollo web, frameworks PHP y sistemas de control de versiones como Git y Agile lover. ¡Consulta la oferta!

About Equipo Developers

Jordi, Adrián, Marc, Iván, Aitor y Jorge se definen como el equipo A del desarrollo en Runroom. Tienen en común su lado más geek y, en diferente medida, la pasión por la música, el cine y la comida.

Cada uno de una punta del país; cada uno diferente al resto. Pero los 6 unidos por el compromiso con el trabajo bien hecho y la búsqueda incansable de la mejor solución tecnológica.

Visit My Website

Something to say?