Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Git
Code

Tip rápido:aprovechando el poder de Git Stash

by
Difficulty:IntermediateLength:ShortLanguages:

Spanish (Español) translation by Gilberto Villa (you can also view the original English article)

Imagina que estás trabajando en una nueva característica dentro de un proyecto de software controlado por Git. Estás a la mitad de algunas cambios cuando se te pide que arregles un bug crítico. Para empezar a trabajar en el problema, necesitas crear una nueva rama y limpiar el directorio de trabajo. Cuando se trata de comandos básicos de Git, tienes dos opciones:

  • Correr git reset --hard para remover los cambios que no se han commiteado.
  • Registrar tu trabajo incompleto como un nuevo commit.

La primera opción borrará todo tu trabajo mientras que la última resulta en un commit parcial que no es significativo. Ninguno de estos escenarios es todo lo que desearíamos.

Aquí es donde el comando git stash entra en juego. Así como git reset --hard, te da un directorio de trabajo limpio, pero también registra tus cambios incompletos internamente. Después de arreglar el bug crítico, tu puedes re-aplicar estos cambios y continuar desde donde estabas. Puedes pensar en git stash como un "botón de pausa" para tu trabajo en progreso.

Prerrequisitos

Este tutorial asume que tienes instalado Git y que estás familiarizado con el flujo de trabajo básico. Deberías sentirte cómodo enviando tus cambios al área de preparación, creando commits, y trabajando con ramas. También necesitaraás un repositorio de Git en el cual experimentar.

1. Stasheando cambios

Antes de que puedas correr git stash, necesitas tener algunos cambios sin commitear en el repositorio de Git. Por ejemplo, si editas un archivo llamado foo.py, la salida del comando git status debería ser algo como esto:

Para stashear estos cambios, simplemente ejecuta git stash sin ningún argumento.

Esto tomará tanto tus cambios en el área de espera como los que no están en el área de espera, grabandolos internamente, y luego limpiando el directorio de trabajo. Esto te da la oportunidad de cambiarte a una nueva rama y desarrollar nuevas características sin preocuparte de que tu commit parcial vaya a estropear algo.

2. Re-aplicando cambios stasheados

Cuando estás listo para volver a tu trabajo incompleto, corre el siguiente comando para re-aplicar los cambios stasheados:

El conjunto más reciente de cambios stasheados aparecerá en el directorio de trabajo y puedes continuar exactamente donde te habías quedado. Es todo lo que hay que hacer.

3. Resolviendo conflictos

Parecido al comando git mergegit stash pop puede resultar en conflictos si las mismas secciones del código fuente han cambiado desde que ejecutaste git stash. Cuando esto pasa, verás el siguiente mensaje después de correr git stash pop:

También encontrarás los archivos afectados listados bajo la sección de Unmerged paths en la salida de git status, así como las líneas afectadas en el archivo fuente.

Necesitarás resolver el conflicto manualmente en el archivo fuente, pero usualmente no querrás commitearlo inmediatamente como lo harías después de un conflicto por git merge. La mayoría de las veces, continuarás trabajando en tu característica incompleta has que tengas preparado un commit significativo. En otras palabras, puedes tratar conflictos por git stash pop tal como cualquier otro cambio que no ha sido commiteado.

4. La pila de stash

Para la mayoría de escenarios, los comandos de arriba son todo lo que necesitas cuando se trata de un "botón de pausa". Pero, entender cómo es que los cambios stasheados son representados abre la puerta para usos más avanzados.

Hasta ahora, sólo hemos estado hablando acerca de stashear un solo conjunto de cambios. Sin embargo, cada vez que corres git stash, cambios sin commitear son guardados en una pila. Esto significa que puedes stashear múltiples conjuntos de cambios al mismo tiempo.

Esto es útil en etapas tempranas del desarrollo cuando no estás seguro qué dirección quieres tomar. En lugar de perder tus cambios con git reset --hard, puedes mantener instantáneas de tu trabajo en progreso en la pila de stash en caso de que quieras re-aplicar alguna de ellas después.

Puedes inspeccionar la pila de stash con el parámetro list.

Si previamente has ejecutado git stash tres veces, esto dará como salida algo como lo siguiente:

El comando git stash pop siempre re-aplica la instantánea más reciente, la que está en la parte superior de la pila de stash. Pero, también es posible escoger cúal instantánea stasheada quieres re-aplicar con el comando apply. Por ejemplo, si quisieras re-aplicar el segundo conjunto de cambios, usarías el siguiente comando:

Así como git stash pop, los cambios re-aparecerán en el directorio de trabajo y puedes continuar trabajando en la característica incompleta. Nota que esto no removerá la instantánea de la pila de estash automáticamente. En su lugar, necesitarás removerla manualmente con el comando drop.

Otra vez, trabajar con la pila de stash es más un caso aislado para la mayoría de los usuarios de Git. los comandos git stash y git stash pop deberían ser suficientes para la mayoría de tus necesidades, aunque git stash list puede ser útil si olvidas dónde tomó lugar tu última operación de stasheado.

Conclusión

Commitear instantáneas significativas está en el corazón de cualquier flujo de trabajo con Git. Commits encapsulados y con propósito hacen que sea mucho más fácil navegar por el historial de tu proyecto, descubrir dónde se introdujeron bugs, y revertir cambios.

Aún cuando no es un comando de todos los días, git stash puede ser una herramienta muy conveniente para crear commits significativos. Te permite guardar trabajo incompleto mientras evitas la necesidad de commitear instantáneas parciales en la historia de tu proyecto. Mantén esto en mente la próxima vez que desees poder poner en pausa lo que sea que estés trabajando y regresar después.

¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.