¿Cómo invertir la aplicación de un alijo?
Tengo un pequeño parche guardado en mi git stash. Lo he aplicado a mi copia de trabajo usando git stash apply
. Ahora, me gustaría revertir esos cambios aplicando el parche a la inversa (algo parecido a lo que haría git revert
pero contra el stash).
¿Alguien sabe cómo hacerlo?
Aclaración: Hay otros cambios en mi copia de trabajo. Mi caso particular es difícil de describir pero puedes imaginar algún código de depuración o experimental que'está en el stash. Ahora está mezclado en mi copia de trabajo con algunos otros cambios y me gustaría ver el efecto con y sin los cambios del alijo.
No parece que stash soporte esto actualmente, pero un git stash apply --reverse
sería una buena característica.
205
3
Según la git-stash manpage, "Un stash se representa como un commit cuyo árbol registra el estado del directorio de trabajo, y su primer padre es el commit en
HEAD
cuando se creó el stash," ygit stash show -p
nos da "los cambios registrados en el stash como un diff entre el estado stashed y su padre original.Para mantener tus otros cambios intactos, usa
git stash show -p | patch --reverse
como en lo siguiente:Editar:
Una ligera mejora a esto es usar
git apply
en lugar de patch:Alternativamente, también puedes usar
git apply -R
como abreviatura degit apply --reverse
.He encontrado esto muy útil últimamente...
git stash
[save]
toma el estado de tu directorio de trabajo, y el estado de tu índice, y los almacena, estableciendo el índice y el área de trabajo a la versiónHEAD
.git stash apply
recupera esos cambios, por lo que
git reset --hard` los eliminaría de nuevo.git stash pop
recupera esos cambios y elimina el cambio almacenado en la parte superior, por lo que
git stash [save]` volvería al estado anterior (pre-pop) en este caso.Hace tiempo que debería haber hecho esto, pero si interpreto el problema correctamente he encontrado una solución sencilla, nota, esto es una explicación en mi propia terminología:
git stash [save]
guardará los cambios actuales y establecerá su rama actual al "estado limpio"git stash list
da algo como:stash@{0}: On develop: saved testing-stuff
git apply stash@{0}
establecerá la rama actual como antes destash [save]
git checkout .
Establecerá la rama actual como afterstash [save]
El código que se guarda en el alijo no se pierde, puede ser encontrado por
git apply stash@{0}
de nuevo.¡En cualquier caso, esto funcionó para mí!