Un escondite es una confirmación especial de fusión del árbol de trabajo entre la confirmación básica y el índice. Una forma podría ser guardar cada uno como parches separados, retirar el escondite del primer padre, restaurar el índice y el árbol de trabajo de los dos parches y finalmente restaurar el escondite (parece que una respuesta es así).
Esto es necesario para recrear completamente toda la información del alijo, y si no le importa, debe al menos revisar el primer padre del alijo antes de restaurar para evitar conflictos y realizar un seguimiento de dónde se creó el alijo.
Esto es lo que hice para restaurar completamente todos los escondites de un repositorio a otro. Si no puede tenerlos en la misma computadora, puede guardar las etiquetas ocultas en un paquete después de crearlas y copiar la lista de referencias y el paquete en la computadora de destino.
Desde la raíz del repositorio original:
- Obtenga la lista de referencias de alijo
- Etiquete sus referencias de alijo para que pueda recuperarlas con git fetch (los nombres de las etiquetas no importan, cámbielo si hay un conflicto. Usé
stash_+ los números en la referencia de alijo lógico)
- Convierta las referencias lógicas en hashes sha1 en orden inverso : las usaremos más tarde
- Guarde esa ruta de repositorio - también para más tarde
refs=$(git stash list|cut -d: -f1)
for ref in $refs; do tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD
NB: Esto requiere bash o shell compatible (ksh, zsh debería hacer ...) También podría incrementar una variable, por ejemplo, stash_$((i++))si su shell no es compatible${param//pattern}
Ahora en el nuevo repositorio, para cada referencia:
- Obtenga la referencia del repositorio anterior (ni siquiera necesitamos usar los nombres de las etiquetas, porque las hemos etiquetado podemos recuperarlas con git fetch)
- Vuelva a importar el alijo de la referencia, utilizando el asunto de esa referencia como el mensaje de alijo.
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
git stash saveahora está en desuso a favor degit stash push