Buscar..


Sintaxis

  • git stash list [<options>]
  • git stash show [<stash>]
  • git stash drop [-q|--quiet] [<stash>]
  • git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
  • git stash branch <branchname> [<stash>]
  • git stash [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]]
  • git stash clear
  • git stash create [<message>]
  • git stash store [-m|--message <message>] [-q|--quiet] <commit>

Parámetros

Parámetro Detalles
espectáculo Muestre los cambios registrados en el alijo como una diferencia entre el estado del alijo y su padre original. Cuando no se da <stash>, muestra el último.
lista Haz una lista de los escondites que tienes actualmente. Cada alijo se enumera con su nombre (por ejemplo, el alijo @ {0} es el último alijo, el alijo @ {1} es el anterior, etc.), el nombre de la rama que estaba vigente cuando se hizo el alijo, y un breve Descripción de la confirmación en la que se basó el alijo.
popular Elimine un solo estado escondido de la lista de escondites y aplíquelo sobre el estado actual del árbol de trabajo.
aplicar Al igual que el pop , pero no elimine el estado de la lista de alijo.
claro Retire todos los estados escondidos. Tenga en cuenta que esos estados estarán sujetos a la poda y pueden ser imposibles de recuperar.
soltar Elimine un solo estado escondido de la lista de escondites. Cuando no se da <stash>, se elimina el último. es decir, stash @ {0}, de lo contrario <stash> debe ser una referencia de registro de stash válida del formulario stash @ {<revision>}.
crear Cree un alijo (que es un objeto de confirmación normal) y devuelva su nombre de objeto, sin almacenarlo en ningún lugar en el espacio de nombres de referencia. Esto pretende ser útil para los scripts. Probablemente no es el comando que quieres usar; ver "guardar" arriba.
almacenar Almacene un alijo determinado creado a través de git stash create (que es un commit de combinación colgante) en el ref del alijo, actualizando el alboroto del alijo. Esto pretende ser útil para los scripts. Probablemente no es el comando que quieres usar; ver "guardar" arriba.

Observaciones

El ocultamiento nos permite tener un directorio de trabajo limpio sin perder ninguna información. Entonces, es posible comenzar a trabajar en algo diferente y / o cambiar de rama.

¿Qué es el alijo?

Al trabajar en un proyecto, es posible que esté a mitad de camino a través de un cambio de rama de función cuando se genere un error contra el maestro. No está listo para enviar su código, pero tampoco quiere perder sus cambios. Aquí es donde git stash es útil.

Ejecute git status en una rama para mostrar sus cambios no confirmados:

(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
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:   business/com/test/core/actions/Photo.c

no changes added to commit (use "git add" and/or "git commit -a")

Luego ejecuta git stash para guardar estos cambios en una pila:

(master) $ git stash
Saved working directory and index state WIP on master: 
2f2a6e1 Merge pull request #1 from test/test-branch
HEAD is now at 2f2a6e1 Merge pull request #1 from test/test-branch

Si ha agregado archivos a su directorio de trabajo, estos también pueden ser ocultados. Solo necesitas escenificarlos primero.

(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        NewPhoto.c

nothing added to commit but untracked files present (use "git add" to track)
(master) $ git stage NewPhoto.c
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
nothing to commit, working tree clean
(master) $

Su directorio de trabajo ahora está limpio de cualquier cambio que haya realizado. Puedes ver esto volviendo a ejecutar el git status :

(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

Para aplicar el último alijo, ejecute git stash apply (además, puede aplicar y eliminar el último git stash pop cambiado con el git stash pop ):

(master) $ git stash apply
On branch master
Your branch is up-to-date with 'origin/master'.
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:   business/com/test/core/actions/Photo.c

no changes added to commit (use "git add" and/or "git commit -a")

Sin embargo, tenga en cuenta que el ocultamiento no recuerda la rama en la que estaba trabajando. En los ejemplos anteriores, el usuario estaba escondido en el maestro . Si cambian a la rama dev , dev , y ejecutan la aplicación git stash apply el último alijo se pone en la rama dev .

(master) $ git checkout -b dev
Switched to a new branch 'dev'
(dev) $ git stash apply
On branch dev
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:   business/com/test/core/actions/Photo.c

no changes added to commit (use "git add" and/or "git commit -a")

Crear alijo

Guarde el estado actual del directorio de trabajo y el índice (también conocido como área de preparación) en una pila de escondites.

git stash

Para incluir todos los archivos sin seguimiento en el alijo, use los --include-untracked o -u .

git stash --include-untracked

Para incluir un mensaje con su alijo para que sea más fácil de identificar más adelante

git stash save "<whatever message>"

Para dejar el área de preparación en el estado actual después del alijo, use los --keep-index o -k .

git stash --keep-index

Listar los alijos guardados

git stash list

Esto mostrará una lista de todos los escondites en la pila en orden cronológico inverso.
Obtendrá una lista que se parece a esto:

stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login

Puede referirse a un alijo específico por su nombre, por ejemplo, stash@{1} .

Mostrar alijo

Muestra los cambios guardados en el último alijo.

git stash show

O un alijo específico

git stash show stash@{n}

Para mostrar el contenido de los cambios guardados para el alijo específico

git stash show -p stash@{n}

Quitar el alijo

Quitar todo el alijo

git stash clear

Elimina el último alijo.

git stash drop

O un alijo específico

git stash drop stash@{n}

Aplicar y eliminar el alijo.

Para aplicar el último alijo y eliminarlo de la pila, escriba:

git stash pop

Para aplicar un alijo específico y eliminarlo de la pila, escriba:

git stash pop stash@{n}

Aplica el alijo sin quitarlo.

Aplica el último alijo sin quitarlo de la pila.

git stash apply

O un alijo específico

git stash apply stash@{n}

Recuperando cambios anteriores del alijo

Para obtener su alijo más reciente después de ejecutar el alijo de git, use

 git stash apply

Para ver una lista de sus escondites, use

 git stash list

Obtendrá una lista que se parece a esto

stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login

Elige un alijo de git diferente para restaurar con el número que aparece para el alijo que deseas

git stash apply stash@{2}

Alijo parcial

Si desea guardar solo algunas diferencias en su conjunto de trabajo, puede usar un alijo parcial.

git stash -p

Y luego, de forma interactiva, seleccione qué cachas esconder.

A partir de la versión 2.13.0 también puede evitar el modo interactivo y crear un alijo parcial con un pathspec usando la nueva palabra clave push .

git stash push -m "My partial stash" -- app.config

Aplicar parte de un alijo con el pago y envío.

Ha hecho un alijo y desea revisar solo algunos de los archivos en ese alijo.

git checkout stash@{0} -- myfile.txt

Alijo interactivo

El ocultamiento toma el estado sucio de su directorio de trabajo, es decir, sus archivos modificados rastreados y los cambios programados, y lo guarda en una pila de cambios no finalizados que puede volver a aplicar en cualquier momento.

Al ocultar solo archivos modificados:

Supongamos que no desea guardar los archivos almacenados y solo almacenar los archivos modificados para que pueda usar:

git stash --keep-index

Lo cual esconderá solo los archivos modificados.

Escondiendo archivos sin seguimiento:

Stash nunca guarda los archivos sin seguimiento, solo guarda los archivos modificados y almacenados. Entonces, si también necesita guardar los archivos sin seguimiento, puede usar esto:

git stash -u

Esto hará un seguimiento de los archivos sin seguimiento, por etapas y modificados.

Guarda algunos cambios particulares solamente:

Supongamos que necesita guardar solo una parte del código del archivo o solo algunos archivos de todos los archivos modificados y ocultos, entonces puede hacerlo así:

git stash --patch

Git no ocultará todo lo que se modifique, sino que le preguntará de forma interactiva cuáles de los cambios le gustaría esconder y qué desea mantener en su directorio de trabajo.

Mueve tu trabajo en progreso a otra rama

Si mientras trabaja, se da cuenta de que está en la rama incorrecta y aún no ha creado ningún compromiso, puede mover su trabajo fácilmente para corregir la rama mediante el ocultamiento:

git stash
git checkout correct-branch
git stash pop

Recuerde que git stash pop aplicará el último alijo y lo eliminará de la lista de alijo. Para mantener el alijo en la lista y aplicar solo a alguna rama, puede usar:

git stash apply

Recuperar un alijo caído

Si acaba de abrirlo y el terminal aún está abierto, aún tendrá el valor de hash impreso en la pantalla de git stash pop :

$ git stash pop
[...]
Dropped refs/stash@{0} (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)

(Tenga en cuenta que Git Stash Drop también produce la misma línea.)

De lo contrario, puedes encontrarlo usando esto:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

Esto le mostrará todas las confirmaciones en las puntas de su gráfico de confirmación que ya no están referenciadas desde ninguna rama o etiqueta: cada confirmación perdida, incluida toda confirmación de alijo que haya creado, estará en algún lugar de esa gráfica.

La forma más fácil de encontrar la confirmación de alijo que desea es probablemente pasar esa lista a gitk :

gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )

Esto abrirá un navegador de repositorio que le mostrará cada confirmación individual en el repositorio , independientemente de si es accesible o no.

Puede reemplazar gitk allí con algo como git log --graph --oneline --decorate si prefiere un buen gráfico en la consola en lugar de una aplicación GUI separada.

Para detectar las confirmaciones ocultas, busque los mensajes de confirmación de este formulario:

WIP on somebranch : commithash Algunos mensajes de confirmación antiguos

Una vez que sepa el hash de la confirmación que desea, puede aplicarlo como un alijo:

git stash apply $stash_hash

O puede usar el menú contextual en gitk para crear sucursales para cualquier compromiso inalcanzable que le interese. Después de eso, puede hacer lo que quiera con ellas con todas las herramientas normales. Cuando hayas terminado, simplemente sopla esas ramas de nuevo.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow