Uno stash è un commit di unione speciale dell'albero di lavoro tra il commit di base e l'indice. Un modo potrebbe essere quello di salvare ciascuno come patch separate, controllare il primo genitore di stash, ripristinare l'indice e l'albero di lavoro dalle due patch e infine ripristinare lo stash (sembra che una risposta vada in questo modo).
Ciò è necessario per ricreare completamente tutte le informazioni dallo stash e, se non ti interessa, dovresti almeno controllare il primo genitore dello stash prima di ripristinare per evitare conflitti e tenere traccia di dove lo stash è stato creato.
Questo è quello che ho fatto per ripristinare completamente tutti gli stash da un repository a un altro. Se non è possibile averli sullo stesso computer, è possibile salvare i tag stash in un bundle dopo averli creati e copiare l'elenco di riferimenti e raggrupparli nel computer di destinazione.
Dalla radice del repository originale:
- Ottieni l'elenco dei ref stash
- Tagga i tuoi ref stash in modo da poterli recuperare con git fetch (i nomi dei tag non sono rilevanti, cambiali in caso di conflitto. Ho usato
stash_
+ i numeri nel ref logico degli stash)
- Converti i riferimenti logici in hash sha1 in ordine inverso : li useremo in seguito
- Salvare quel percorso di repository, anche per dopo
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: Questo richiede bash o shell compatibile (ksh, zsh dovrebbe fare ...) Potresti anche incrementare una variabile, ad es. stash_$((i++))
Se la tua shell non supporta${param//pattern}
Ora nel nuovo repository, per ogni riferimento:
- Recupera il riferimento dal vecchio repository (non abbiamo nemmeno bisogno di usare i nomi dei tag, perché li abbiamo taggati, possiamo recuperarli con git fetch)
- Reimportare lo stash dall'arbitro, usando l'oggetto di quell'arbitro come messaggio di stash.
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
git stash save
è ora deprecato in favore digit stash push