¿Cómo puedo eliminar todas mis reservas de Git a la vez?


1406

¿Cómo puedo eliminar todas mis reservas de Git a la vez?

Específicamente quiero decir, con escribir en un comando.

Respuestas:


2462

El siguiente comando elimina todas sus reservas:

git stash clear

De la documentación de git :

clear

Elimina todos los estados escondidos.

ADVERTENCIA IMPORTANTE: esos estados estarán sujetos a poda y pueden ser imposibles de recuperar (...).


13
¿por qué no git stash drop?
user20358

137
@ user20358: Porque stash drop(" Retirar un solo estado escondido de la lista alijo Cuando no se da ninguna <alijo>, elimina el último de ellos (...).. ') no responde a la pregunta (' ¿Cómo puedo borrar todo de mi Git se esconde a la vez? ")?
Tadeck

11
Además de la respuesta aceptada mencionada - git stash clear, para confirmar si todo está despejado, use -git stash list
kamal

2
@ jedd.ahyoung Esto debería tener otros 1,000 votos a favor. ¡La documentación para gites prácticamente imposible de encontrar! git-scm.com/docs/git-stash
Drenai

11
@ Ryan: git help <command>es la mejor manera de obtener documentación (y, en realidad, es bastante buena). En este caso, git help stashdemuestre claramente que lo git stash clearhace (esto no me impidió llegar a SO primero y votar la respuesta ... pero eso le dice más sobre mí que git: D)
Marco Massenzio

46

Hay dos formas de eliminar un alijo:

  1. Si ya no necesita un alijo en particular, se puede eliminar con: $ git stash drop <stash_id>.
  2. Puede borrar todos los alijos desde el repositorio con: $ git stash clear.

Use ambos con precaución, tal vez sea difícil revertir las reservas una vez eliminadas.

Aquí está el artículo de referencia .


2
Cerrar la terminal no tiene nada que ver con eso. git no es un demonio; solo se ejecuta cuando lo llamas. No tiene idea de que cerró la terminal.
DylanYoung

31

Este comando le permite ver todos los cambios escondidos.

git stash list

Aquí está el siguiente comando, úselo para borrar todos sus cambios escondidos

git stash clear

Ahora, si desea eliminar uno de los cambios escondidos del área oculta

git stash drop stash@{index}   // here index will be shown after getting stash list.

Nota: le git stash listpermite obtener el índice del área oculta de git.


Vale la pena mencionar que al menos para el terminal integrado en VSCode que usa Windows 10, lo es git stash drop 'stash@{index}', con apóstrofes.
Oriol Miró

13

Quería mantener algunas reservas recientes, pero eliminar todo lo demás.

Debido a que todos los escondites se vuelven a numerar cuando sueltas uno, esto es realmente fácil de hacer con while. Para eliminar todas las reservas anteriores a stash @ {19}:

while git stash drop 'stash@{20}'; do true; done

¿Se aplica esto a los valores indexados introducidos en Git 2.11, donde puede referirse al tercer alijo de la lista de alijo usando en su git stash pop 3lugar? Quería saber si podemos usar el whilebucle y soltar escondites usando valores de índice.
tom_mai78101

¡Me encanta la simplicidad de esta solución elegante y agradable!
Dominic

3

Tenía otro requisito, ya que solo se deben eliminar algunos escondites, el código a continuación sería útil en ese caso.

#!/bin/sh
for i in `seq 5 8`
do
   git stash drop stash@{$i}
done

/ * eliminará de 5 a 8 índices * /


intentarfor iterator in `seq 5 8`; git stash drop stash@{$iterator}; done
Chris McCowan

3
Tenga en cuenta que cuando cae, las reservas restantes se mueven hacia arriba 1 lugar. Entonces, si desea eliminar de 5 a 8, debe contar hacia atrás o eliminar stash @ {5} cuatro veces. Por ejemplo: for i in `seq 4`; do git stash drop 'stash@{5}'; done
urdimbre

@ChrisMcCowan a su código también le falta undo
steezeburger

3

si desea eliminar el último alijo o en cualquier índice particular ,

git stash drop type_your_index

> git stash list

  stash@{0}: abc
  stash@{1}: xyz
  stash@{1}: pqr

> git stash drop 0

  Dropped refs/stash@{0}

> git stash list

  stash@{0}: xyz
  stash@{1}: pqr

si quieres eliminar todo el alijo de una vez ,

> git stash clear
>

> git stash list
>

Advertencia : una vez hecho esto, no puedes revertir tu alijo


1

Para eliminar todas las reservas de más de 40 días, use:

git reflog expire --expire-unreachable=40.days refs/stash

Agregar --dry-runpara ver qué escondites se eliminan.

Consulte https://stackoverflow.com/a/44829516/946850 para obtener una explicación y muchos más detalles.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.