que - ¿Cuál es el propósito de git stash create y git stash store?
git stash pop que hace (2)
De la documentación en git-scm , hay dos comandos de git stash que mencionan relevancia para los scripts, pero no para uso general:
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.
Suponiendo que estamos considerando el contexto de los scripts automatizados, ¿qué ventajas git stash create
git stash store
y git stash store
sobre el habitual git stash save
and friends?
Desafortunadamente, el buen ejemplo que Andrew mostró arriba no funciona en todos los casos, porque:
Si hay cambios locales, entonces
git stash create
creará una confirmación sin referencia, pero en realidad no borrará los cambios locales.Si no hay cambios locales, entonces no se creará ningún compromiso (como señaló BlackVegetable). En ese caso no deberíamos
apply
al final.(Y menor: Andrew olvidó mantener y usar la ID de confirmación producida por
create
).
Con eso en mente, me parece que el uso debería ser así:
# Save the local changes, keep a reference to them, and clear them
stashed_commit="$(git stash create)"
git reset --hard
# Do your thing
git fetch
git rebase
# If there were local changes, then restore them
if [ -n "${stashed_commit}" ]
then git stash apply "${stashed_commit}"
fi
Difícil de decir lo menos!
Ay. Sería mucho más sencillo si pudiera simplemente git stash save --allow-empty
en la parte superior, y el git stash pop
en la parte inferior.
Me encantaría estar equivocado. ¡Por favor corrigeme!
Puede usar git stash create
cuando está escribiendo scripts que deben ocultarse como un detalle de implementación y no desea perturbar el reflog de ocultación del usuario.
Dependiendo de lo que suceda a continuación, podría (en el caso de un error, por ejemplo) decidir que, después de todo, desea perturbar la acumulación de objetos ocultos, en cuyo punto puede usar git stash store
.
Obviamente, se puede implementar un alijo regular en términos de create
luego store
, pero también puedo imaginar que se use en un comando hipotético de update-branch
que haga algo como esto:
git stash create
git fetch
git rebase
git stash apply