untracked stash name files example git

name - git stash stack overflow



¿Cómo borrar un stash creado con git stash create? (5)

Deberias estar usando

git stash save

y no

git stash create

porque esto crea un alijo (que es un objeto de confirmación regular) y devuelve su nombre de objeto, sin almacenarlo en ningún lugar en el espacio de nombres de referencia. Por lo tanto, no será accesible con el alijo de aplicar.

Use git stash save "some comment" se usa cuando tiene cambios sin organizar que desea replicar / mover a otra rama

Use git stash apply stash@{0} (suponiendo que su índice de alijo guardado sea 0) cuando desee que los cambios guardados (enmascarados) se reflejen en su rama actual

Siempre puedes usar la git stash list para verificar todos los índices de stash.

y use git stash drop stash@{0} (suponiendo que su índice de alijo guardado es 0 y desea eliminarlo) para eliminar un alijo en particular.

Git stash parece hacer mucho de lo que quiero, excepto que es un poco difícil de escribir, ya que si no tienes cambios, entonces git stash; git stash pop git stash; git stash pop hará algo diferente que si tiene cambios en su repositorio.

Parece que git stash create es la respuesta a ese problema, y ​​todo funciona, excepto por una cosa ... No puedo deshacerme del stash creado. ¿Hay alguna manera de deshacerse del alijo?

Para que quede 100% claro lo que estoy haciendo:

Crea el alijo:

~/tmp/a(master) $ git stash create 60629375d0eb12348f9d31933dd348ad0f038435 ~/tmp/a(master) $ git st # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: b # ~/tmp/a(master) $ git reset --hard HEAD is now at 555d572 log message

Usa el alijo:

~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435 fatal: can''t open patch ''60629375d0eb12348f9d31933dd348ad0f038435'': No such file or directory ~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435 # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: b #

Eliminar el alijo: (excepto que este último bit no funciona)

~/tmp/a(master) $ git stash drop !$ git stash drop 60629375d0eb12348f9d31933dd348ad0f038435 ''60629375d0eb12348f9d31933dd348ad0f038435'' is not a stash reference


Desde git doc: http://git-scm.com/docs/git-stash

soltar [-q | --quiet] []

Elimine un solo estado escondido de la lista de escondites. Cuando no se da, se quita la última. es decir, stash@{0} , de lo contrario debe ser una referencia de registro de stash válida del formulario stash @ {}.

ejemplo:

git stash drop stash@{5}

Esto eliminaría la entrada de stash 5. Para ver toda la lista de stashes:

git stash list


No es necesario eliminar un alijo creado con git stash create . De la documentación:

Cree una entrada de ocultación (que es un objeto de confirmación normal) y devuelva su nombre de objeto, sin almacenarlo en ningún lugar del espacio de nombres de referencia. Esto pretende ser útil para los scripts. Probablemente no es el comando que quieres usar; ver "guardar" arriba.

Dado que nada hace referencia al compromiso de alijo, finalmente se recogerá la basura.

Un alijo creado con git stash o git stash save se guarda en refs/stash , y se puede eliminar con el git stash drop . Al igual que con todos los objetos de Git, los contenidos de ocultación reales no se eliminan de su computadora hasta que un gc elimina esos objetos después de que expiren (el valor predeterminado es hace 2 semanas).

Los alijos más antiguos se guardan en el reflog refs/stash (prueba cat .git/logs/refs/stash ), y se pueden eliminar con git stash drop stash@{n} , donde n es el número que se muestra en la git stash list .


Si está 100% seguro de tener solo un alijo (haga una git stash list para estar seguro al 107%), puede hacer una

git stash clear

Y olvídate de ellos (borra todos los escondites).

Nota: Agregué esta respuesta para aquellos que terminaron aquí buscando una manera de eliminarlos a todos (como yo).


git stash drop no toma ningún parámetro, que elimina el top stash superior, o una referencia de stash que se parece a: stash@{n} que n designa a cuál stash caer. No puedes pasar un ID de confirmación para git stash drop .

No estoy seguro de por qué crees que es necesario eliminar un alijo, ya que si estás usando el stash create una entrada de alijo no se crea para tu "alijo", por lo que no hay nada que dejar.