Git stash parece hacer mucho de lo que quiero, excepto que es un poco difícil de escribir, ya que si no tiene cambios, git stash; git stash pop
hará algo diferente que si tiene cambios en su repositorio.
Parece que esa git stash create
es la respuesta a ese problema, y todo funciona, excepto por una cosa ... No puedo deshacerme del alijo creado. ¿Hay alguna forma 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
git apply
ejecución en el segundo cuadro de código en el momento de escribir esto no aplicó un parche; el mensaje de error en la salida le dijo esto. Entonces, de hecho, trataste de crear un alijo (que no funcionó, mira los comentarios a continuación) aplica un alijo que no se creó y luego dejaste un alijo que no se creó. Por eso nada de lo que hiciste funcionó.git stash apply
funcionó. Losgit apply
intentos de leer un archivo de parche local, que no existe. Para ser sincero, probablemente no debería estar allí, y nunca podría haber funcionado. Estoy vagamente tentado a eliminarlo de la pregunta, pero dado que ha ayudado a tantos en su forma actual, lo dejaré como está.Respuestas:
Para eliminar un alijo normal creado con
git stash
, deseagit stash drop
ogit stash drop stash@{n}
. Ver abajo para más detalles.No es necesario eliminar un alijo creado con
git stash create
. De los documentos:Como nada hace referencia a la confirmación de almacenamiento, eventualmente se recolectará basura.
Un alijo creado con
git stash
ogit stash save
se guarda enrefs/stash
, y se puede eliminar congit stash drop
. Al igual que con todos los objetos Git, el contenido real de alijo no se elimina de su computadora hasta que se eliminengc
esos objetos después de que caduquen (el valor predeterminado es 2 semanas después).Las reservas más antiguas se guardan en el
refs/stash
registro de registro (pruebacat .git/logs/refs/stash
) y se pueden eliminar congit stash drop stash@{n}
, donden
se muestra el númerogit stash list
.fuente
git stash
: no sé si eso realmente se asigna agit stash create
algo más. Git es ciertamente algo que todavía estoy aprendiendo sobre (si no lo fuera, no estaría leyendo SO Q & A de esta manera.)git stash create
. En lugar de guardar en un archivo de parche con marca de tiempo, puede dejar que el registro de git lo guarde en una referencia personalizada (por ejemplorefs/backup
). Intentaría algo como 1)git stash create
, 2) comparar el nuevo árbol de alijo conrefs/backup^{tree}
, 3) si el árbol es diferentegit update-ref --create-reflog refs/backup <stash-sha>
,. Eventualmente, las reservas de respaldo antiguas se podarán automáticamente.git stash drop
no toma ningún parámetro, que deja caer el alijo superior, o una referencia de alijo que se parece a:stash@{n}
quen
designa qué alijo para dejar caer. No puede pasar una identificación de confirmación agit stash drop
.Dejar caer un escondite cambiará las
stash@{n}
designaciones de todos los escondites más abajo en la pila.No estoy seguro de por qué crees que necesitas dejar un alijo porque si estás usando
stash create
una entrada de alijo no se crea para tu "alijo", entonces no hay nada que tirar.fuente
Si está 100% seguro de tener solo un alijo o si desea eliminar todos los alijos (asegúrese de
git stash list
que esté 107% seguro), puede hacer lo siguiente:..y olvídate de ellos (elimina todos los escondites).
Nota: Se agregó esta respuesta para aquellos que terminaron aquí buscando una forma de eliminarlos a todos (como yo).
fuente
git stash drop
, ya que eso solo deja caer un alijo, y no tiene que preocuparse por perder más de lo esperado.git stash drop
como siempre. No estoy seguro de lo que hice de manera diferente. De todos modos,git stash clear
funcionó para mí. No sabía que existía. +1Desde git doc: http://git-scm.com/docs/git-stash
Elimine un solo estado oculto de la lista de ocultación. Cuando no se da, elimina la última. es decir
stash@{0}
, de lo contrario debe ser una referencia de registro de alijo válida del formulario alijo @ {}.ejemplo:
Esto eliminaría la entrada de alijo 5. Para ver toda la lista de alijos:
fuente
git stash show stash@{REPLACE_IT_WITH_STASH_INDEX}
antes de ejecutargit stash drop
. Créeme, te ahorrará muchos problemas :)Deberías estar usando
y no
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 del espacio de nombres de referencia. Por lo tanto, no será accesible con stash apply.
El uso
git stash save "some comment"
se usa cuando tiene cambios no escalonados que desea replicar / mover a otra ramaUse
git stash apply stash@{0}
(suponiendo que su índice de alijo guardado sea 0) cuando desee que sus cambios guardados (escondidos) se reflejen en su rama actualsiempre puedes usar
git stash list
para verificar todos tus índicesy use
git stash drop stash@{0}
(suponiendo que su índice de alijo guardado sea 0 y desee eliminarlo) para eliminar un alijo en particular.fuente
git stash
defectogit stash save
git stash create
está destinado a ser utilizado por scripts. Ese es el caso de uso de OP. Por lo tanto, recomendargit stash save
puede ser útil para usos "normales", pero no para el caso de uso de OP. OP puede querer echar un vistazo a los documentos : hay más comandos relacionados con las secuencias de comandos, por ejemplogit stash store
git stash save "message"
hoy en día debería leergit stash push -m "message"
. Comparargit commit -m "message"
Tambien funciona
me gusta
fuente
El documento está aquí (en chino) , haga clic.
puedes usar
fuente
git stash create
es diferente agit stash save
, en particular, el formulario de creación no aparece en la lista y no se puede descartar, de ahí la pregunta.fuente