Los desarrolladores a menudo tienen que realizar múltiples tareas. Es posible que esté trabajando en una nueva función y puede haber una solicitud para solucionar un error. O podría ser el desarrollador principal en múltiples proyectos.
Cuando cambia entre tareas, a veces no desea cometer un trabajo sin terminar. En estos casos, el comando git stash puede ser de gran ayuda. Le permite apilar sus cambios y luego volver al trabajo inacabado sin agregar compromisos innecesarios a sus repositorios GIT.
Un flujo de trabajo para Git Stash
Inicializamos una rama maestra Git y cometamos un archivo ReadMe.TXT.
$ mkdir my_project
$ cd my_project/
$ git init
$ Touch ReadMe.TXT
$ git add -a
$ git commit -m "inicializar"
Ahora agregemos otro archivo llamado un.txt a la rama maestra.
$ touch a.TXTSi verifica el historial, verá:
$ git log -ennelineAhora creemos una rama Feature1 y agregemos una B.archivo txt:
$ git rama característica1Abre tu B.archivo txt en un editor y poner en la línea:
Estoy a punto de cambiar esto a ..Y guarda el archivo. Si revisa el estado de su git, ve lo siguiente:
Estado de $ git
En la rama característica1
Cambios no organizados para Commit:
(Use "git add ..." para actualizar lo que se comprometerá)
(Use "Git Checkout - ..." para descartar cambios en el directorio de trabajo)
Modificado: B.TXT
No se agregaron cambios para confirmar (use "git add" y/o "git commit -a")
Supongamos que, en esta etapa, obtienes una solicitud para actualizar el A.archivo txt en la rama maestra. Pero no has terminado con la B.archivo txt. Si intenta consultar la rama maestra, recibe el siguiente error:
$ git checkout maestro
Error: sus cambios locales en los siguientes archivos se sobrescribirían mediante el pago:
b.TXT
Por favor, comete sus cambios o guárdelos antes de que pueda cambiar de ramas.
Aborto
Pero no quieres cometer el trabajo inacabado en B.TXT. Puedes usar el alijo de git en esta situación:
$ git stashSi comprobas B.txt, debería estar vacío:
$ Cat B.TXTSi revisa el alijo, verá:
Lista de stash de $ git
stash@0: wip on stong1: 2cfe39b agregado b.TXT
Si intenta ver la rama maestra, debería poder hacerlo ahora:
$ git checkout maestro
Cambio a la rama 'maestro'
Supongamos que realiza los cambios necesarios en el maestro y luego vuelve a la rama Funcion1:
$ git de pago característica1
Tu b.txt todavía está vacío:
$ Cat B.TXTPero si obtiene los cambios del alijo usando el siguiente comando:
$ git stash aplicar
En la rama característica1
Cambios no organizados para Commit:
(Use "git add ..." para actualizar lo que se comprometerá)
(Use "Git Checkout - ..." para descartar cambios en el directorio de trabajo)
Modificado: B.TXT
No se agregaron cambios para confirmar (use "git add" y/o "git commit -a")
El comando de aplicar altas tomó los cambios escondidos y lo aplicó a B.archivo txt
Puedes completar tu trabajo en B.txt mi modificación de la línea
A
Ahora adelante y comete sus cambios:
$ git add -aAplicar un alijo no lo limpia automáticamente desde el alijo. Tienes que limpiarlo manualmente:
$ git stash drop
Refs/stash@0 (0a66a16b32633e8d564d08e38254c491c1b1d3be)
¿Por qué Git Stash con nombre??
El alijo de git es una pila. Para que puedas seguir apilando tus cambios.
Supongamos que agrega "x" a B.txt, guarda, agregue una "y" a B.txt, guárdelo y agregue una "Z" a B.txt y esconderlo. Si revisa el historial de alijo, verá algo como esto:
Lista de stash de $ gitNo tienes forma de saber qué alijo tiene qué cambio. Cuando está escondiendo, puede usar la opción Guardar para poner en los comentarios. Puede usar los comentarios para adjuntar un nombre a su alijo y hacerlos reconocibles:
$ git stash save "x"
Directorio de trabajo guardado y estado de índice en la función1: x
La cabeza ahora está en 2D6F515 modificado B.TXT
Para agregar modificación "X", "Y" y "Z", puede obtener lo siguiente en su alijo usando la opción Guardar para cada alijo:
Lista de stash de $ git
stash@0: en característica1: z
stash@1: en característica1: y
stash@2: en característica1: x
Ahora tienes un nombre para cada cambio que te esconde. Desafortunadamente, no puedes usar el nombre para recuperar el alijo. Tendrás que usar el número de alijo. Supongamos que quieres obtener tu cambio "Y". Ves que stash@1 es Y. Entonces puede aplicar ese cambio a su rama actual:
$ git stash aplica stash@1
Y tu B.TXT debe tener los cambios de stash@1.
Puede usar el mismo método para soltar un alijo. Supongamos que te das cuenta de que ya no necesitas el sector X. Puede usar el siguiente comando para eliminar ese alijo:
$ git stash drop stash@2
Y el alijo debería haberse ido:
Lista de stash de $ git
stash@0: en característica1: z
stash@1: en característica1: y
Recuerde que si usa las opciones Aplicar y soltar sin parámetros, usará la parte superior de la pila (stash@0).
El comando git stash es una forma poderosa de administrar su espacio de trabajo. Dominar este comando te ayudará a trabajar de manera más eficiente.
STACK OVERFLOW: How-to-to-to-name-y-retrieve-a-stash-byame-in-git