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. En 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.
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