Imagina que estás trabajando en una característica en un proyecto de software controlado por Git. Estás justo en el medio de realizar algunos cambios cuando recibes una solicitud para corregir un error crítico. Para comenzar a resolver el problema, necesita una nueva sucursal y un directorio de trabajo limpio. Cuando se trata de comandos básicos de Git, tienes dos opciones:
git reset - hard
para eliminar tus cambios no comprometidos.La primera opción pierde todo su trabajo, mientras que la última resulta en un compromiso parcial que no es significativo. Ninguno de estos escenarios es tan deseable..
Aquí es donde el git stash
El comando entra en juego. Me gusta git reset - hard
, le proporciona un directorio de trabajo limpio, pero también registra internamente sus cambios incompletos. Después de corregir el error crítico, puede volver a aplicar estos cambios y continuar donde lo dejó. Tu puedes pensar en git stash
como un "botón de pausa" para su trabajo en progreso.
Este tutorial asume que has instalado Git y que estás familiarizado con su flujo de trabajo básico. Debería estar cómodo con los cambios de estadios, la creación de confirmaciones y el trabajo con sucursales. También necesitarás un repositorio Git para experimentar.
Antes de que puedas correr git stash
, necesita tener algunos cambios no confirmados en su repositorio Git. Por ejemplo, si editaste un archivo llamado foo.py
, tu estado de git
La salida se vería así:
Cambios en el maestro de sucursal no preparados para cometer: (use "git add... "para actualizar lo que se confirmará) (use" git checkout -- ... "para descartar cambios en el directorio de trabajo) modificado: foo.py
Para guardar estos cambios, simplemente ejecute git stash
sin ningún argumento.
git stash
Esto tomará tanto los cambios en etapas como los no en etapas, los registra internamente y luego borra el directorio de trabajo. Esto le da la oportunidad de cambiar a una nueva rama y desarrollar otras funciones sin preocuparse por que su compromiso parcial arruine cualquier cosa..
Cuando esté listo para volver a su trabajo incompleto, ejecute el siguiente comando para volver a aplicar los cambios ocultos:
git stash pop
El último conjunto de cambios oculto volverá a aparecer en su directorio de trabajo y podrá continuar exactamente donde lo dejó. Eso es todo al respecto.
Como el git merge
mando, git stash pop
puede resultar en conflictos si las mismas secciones del código fuente han cambiado desde que ejecutaste git stash
. Cuando esto suceda, verás el siguiente mensaje después de ejecutar git stash pop
:
Fusión automática CONFLICTO foo.py (contenido): Fusionar conflicto en foo.py
También encontrará el archivo afectado en la lista de Caminos no unidos
sección en el estado de git
salida, así como las líneas afectadas en el archivo de origen.
<<<<<<< Updated upstream print("Recently committed changes"); ======= print("Incomplete work"); >>>>>>> Cambios ocultos
Deberá resolver manualmente el conflicto en el archivo de origen, pero normalmente no desea cometerlo inmediatamente como lo haría después de un conflicto. git merge
conflicto. La mayoría de las veces, continuará trabajando en su función sin terminar hasta que haya preparado un compromiso significativo. Luego, simplemente puede agregarlo al índice y confirmarlo como de costumbre. En otras palabras, se puede tratar. git stash pop
conflictos como cualquier otro cambio no comprometido.
Para la mayoría de los escenarios, los comandos anteriores son todo lo que necesita cuando se trata de un "botón de pausa". Sin embargo, entender cómo se representan los cambios ocultos abre la puerta a un uso más avanzado.
Hasta ahora, solo hemos estado hablando de esconder un solo conjunto de cambios. Sin embargo, cada vez que corres git stash
, Los cambios no confirmados se almacenan en una pila. Esto significa que puedes esconder múltiples conjuntos de cambios al mismo tiempo.
Esto es útil en las primeras etapas de desarrollo cuando no está seguro de qué dirección quiere tomar. En lugar de perder tus cambios con git reset - hard
, puede mantener sus instantáneas de trabajo en curso en la pila de almacenamiento en caso de que quiera volver a aplicar una de ellas más adelante.
Puedes inspeccionar la pila de escondites con el lista
parámetro.
lista de git stash
Si hubieras ejecutado anteriormente. git stash
Tres veces, esto produciría algo como lo siguiente:
stash @ 0: WIP en nueva función: 5cedccc Prueba algo loco stash @ 1: WIP en nueva característica: 9f44b34 Toma una dirección diferente @ 2: WIP en nueva característica: 5acd291 Comenzar nueva característica
los git stash pop
el comando siempre vuelve a aplicar la instantánea más reciente, la que está en la parte superior de la pila de alijo. Pero, también es posible seleccionar y elegir qué instantánea oculta desea volver a aplicar con el aplicar
mando. Por ejemplo, si quisiera volver a aplicar el segundo conjunto de cambios, usaría el siguiente comando:
git stash aplicar stash @ 1
Al igual que git stash pop
, los cambios volverán a aparecer en su directorio de trabajo y puede continuar trabajando en la función incompleta. Tenga en cuenta que esto no eliminará automáticamente la instantánea de la pila de alijo. En su lugar, tendrá que eliminarlo manualmente con el soltar
mando.
git stash drop stash @ 1
Una vez más, trabajar con el stash stack es más un caso de vanguardia para la mayoría de los usuarios de Git. los git stash
y git stash pop
Los comandos deberían ser suficientes para la mayoría de sus necesidades, aunque lista de git stash
También puede resultar útil si olvidó dónde tuvo lugar su última operación de alijo.
El hecho de realizar instantáneas significativas es la base de cualquier flujo de trabajo de Git. Los compromisos encapsulados y con propósito hacen que sea mucho más fácil navegar por el historial de su 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 compromisos significativos. Le permite almacenar trabajos incompletos, evitando la necesidad de enviar instantáneas parciales a su historial de proyecto permanente. Recuerda esto la próxima vez que desees poder pausar en lo que estabas trabajando y volver a él más tarde..