Advertisement
  1. Code
  2. Git

Consejo rápido: Aprovechar el poder de Git Stash

Scroll to top
Read Time: 5 min

() translation by (you can also view the original English article)

Imagina que estás trabajando en una función de un proyecto de software controlado por Git. Estás a punto de hacer algunos cambios cuando recibes una solicitud para corregir un error crítico. Para comenzar a resolver el problema, necesitas una nueva rama y un directorio de trabajo limpio. Cuando se trata de comandos básicos de Git, tienes dos opciones:

  • Ejecutar git reset --hard para eliminar los cambios no confirmados.
  • Registrar tu trabajo incompleto como una nueva confirmación.

La primera opción pierde todo tu trabajo, mientras que la segunda da como resultado una confirmación parcial que no es significativa. Ninguna de estas opciones es tan conveniente.

Aquí es donde entra en juego el comando git stash. Al igual que git reset --hard, te da un directorio de trabajo limpio, pero también registra tus cambios incompletos internamente. Después de corregir el error crítico, puedes volver a aplicar estos cambios y continuar donde lo dejaste. Puedes pensar en git stash como un "botón de pausa" para tu trabajo en curso.

Requisitos previos

En este tutorial se supone que instalaste Git y que estás familiarizado con su flujo de trabajo básico. Deberías sentirte cómodo organizando cambios, creando confirmaciones y trabajando con ramas. También necesitarás un repositorio de Git para experimentar.

1. Almacenamiento de cambios

Antes de que puedas ejecutar git stash, debes tener algunos cambios no confirmados en tu repositorio de Git. Por ejemplo, si editaste un archivo llamado foo.py, tu salida git status se vería así:

1
On branch master
2
Changes not staged for commit:
3
  (use "git add <file>..." to update what will be committed)
4
  (use "git checkout -- <file>..." to discard changes in working directory)
5
6
    modified:   foo.py

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

1
git stash

Esto tomará tus cambios almacenados y no almacenados, los registrará internamente y luego borrará el directorio de trabajo. Esto te da la oportunidad de cambiar a una nueva rama y desarrollar otras funciones sin preocuparte de que tu confirmación parcial desordene algo.

2. Reaplicación de cambios guardados

Cuando estés listo para volver a tu trabajo incompleto, ejecuta el siguiente comando para volver a aplicar los cambios guardados:

1
git stash pop

El conjunto de cambios guardados más recientemente volverá a aparecer en tu directorio de trabajo y podrás continuar exactamente donde lo dejaste. Eso es todo al respecto.

3. Resolución de conflictos

Al igual que el comando git merge, git stash pop puede generar conflictos si las mismas secciones del código fuente cambiaron desde que ejecutaste git stash. Cuando esto suceda, verás el siguiente mensaje después de ejecutar git stash pop:

1
Auto-merging foo.py
2
CONFLICT (content): Merge conflict in foo.py

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

1
<<<<<<< Updated upstream
2
print("Recently committed changes");
3
=======
4
print("Incomplete work");
5
>>>>>>> Stashed changes

Deberás resolver manualmente el conflicto en el archivo de origen, pero por lo general no querrás confirmarlo inmediatamente como lo harías después de un conflicto git merge. La mayoría de las veces, continuarás trabajando en tu función inacabada hasta que hayas preparado una confirmación significativa. Luego, simplemente puedes agregarlo al índice y confirmarlo como de costumbre. En otras palabras, puedes tratar los conflictos de git stash pop como cualquier otro cambio no confirmado.

4. La pila de almacenamiento

Para la mayoría de los escenarios, los comandos anteriores son todo lo que necesitas cuando se trata de un "botón de pausa". Sin embargo, comprender cómo se representan los cambios guardados abre nuevas posibilidades a un uso más avanzado.

Hasta ahora, sólo hemos estado hablando de guardar un solo conjunto de cambios. Sin embargo, cada vez que ejecutas git stash, los cambios no confirmados se almacenan en una pila. Esto significa que puedes guardar varios conjuntos de cambios al mismo tiempo.

Esto es útil en las primeras etapas de desarrollo cuando no estás seguro de qué dirección quieres tomar. En lugar de perder tus cambios con git reset --hard, puedes mantener tus instantáneas de trabajo en curso en la pila de almacenamiento en caso de que quieras volver a aplicar una de ellas más adelante.

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

1
git stash list

Si anteriormente ejecutaste git stash tres veces, esto generaría algo así:

1
stash@{0}: WIP on new-feature: 5cedccc Try something crazy
2
stash@{1}: WIP on new-feature: 9f44b34 Take a different direction
3
stash@{2}: WIP on new-feature: 5acd291 Begin new feature

El comando git stash pop siempre vuelve a aplicar la instantánea más reciente, la que está en la parte superior de la pila de almacenamiento. Pero también es posible elegir qué instantánea oculta quieres volver a aplicar con el comando apply. Por ejemplo, si quisieras volver a aplicar el segundo conjunto de cambios, usarías el siguiente comando:

1
git stash apply stash@{1}

Al igual que git stash pop, los cambios volverán a aparecer en tu directorio de trabajo y puedes seguir trabajando en la función incompleta. Ten en cuenta que esto no eliminará automáticamente la instantánea de la pila de almacenamiento. En su lugar, deberás eliminarlo manualmente con el comando drop.

1
git stash drop stash@{1}

Una vez más, trabajar con la pila de almacenamiento es más un caso extremo 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 también puede ser útil si olvidaste dónde tuvo lugar tu última operación de almacenamiento.

Conclusión

La confirmación de instantáneas significativas es el núcleo de cualquier flujo de trabajo de Git. Las confirmaciones encapsuladas y con propósito hacen que sea mucho más fácil navegar por el historial de tu proyecto, averiguar dónde se introdujeron los errores y revertir los cambios.

Si bien no es exactamente un comando cotidiano, git stash puede ser una herramienta muy conveniente para crear confirmaciones significativas. Te permite almacenar el trabajo incompleto evitando la necesidad de confirmar instantáneas parciales al historial de tu proyecto permanente. Ten esto en cuenta la próxima vez que quieras poder hacer una pausa en lo que estabas trabajando y volver más tarde.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
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.