Ein Stash ist ein spezielles Zusammenführungs-Commit des Arbeitsbaums zwischen dem Basis-Commit und dem Index. Eine Möglichkeit könnte darin bestehen, jedes Patch als separate Patches zu speichern, das erste übergeordnete Stash auszuchecken, den Index und den Arbeitsbaum aus den beiden Patches wiederherzustellen und schließlich das Stash wiederherzustellen (anscheinend geht eine Antwort in diese Richtung).
Dies ist erforderlich, um alle Informationen aus dem Stash vollständig neu zu erstellen. Wenn Sie sich nicht darum kümmern, sollten Sie zumindest das erste übergeordnete Element des Stashs vor dem Wiederherstellen auschecken, um Konflikte zu vermeiden und zu verfolgen, wo der Stash erstellt wurde.
Dies ist, was ich getan habe, um alle Verstecke von einem Repo zum anderen vollständig wiederherzustellen. Wenn Sie sie nicht auf demselben Computer haben können, können Sie die Stash-Tags nach dem Erstellen in einem Bundle speichern und die Refs-Liste und das Bundle auf den Zielcomputer kopieren.
Aus der Wurzel des ursprünglichen Repos:
- Holen Sie sich die Liste der Stash Refs
- Kennzeichnen Sie Ihre Stash-Refs, damit Sie sie mit git fetch abrufen können (die Tag-Namen spielen keine Rolle, ändern Sie sie, wenn ein Konflikt vorliegt. Ich habe verwendet
stash_
+ die Nummer (n) in der logischen Stash-Ref verwendet).
- Konvertieren Sie die logischen Referenzen in sha1-Hashes in umgekehrter Reihenfolge - wir werden sie später verwenden
- Speichern Sie diesen Repo-Pfad - auch für später
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: Dies erfordert Bash oder eine kompatible Shell (ksh, zsh sollte ...). Sie können auch eine Variable erhöhen, z stash_$((i++))
B. wenn Ihre Shell dies nicht unterstützt${param//pattern}
Jetzt im neuen Repo für jede Referenz:
- Holen Sie sich den Ref aus dem alten Repo (wir müssen nicht einmal die Tag-Namen verwenden, da wir sie markiert haben, können wir sie mit git fetch abrufen)
- Importieren Sie den Stash erneut aus dem Ref, wobei Sie den Betreff dieses Ref als Stash-Nachricht verwenden.
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
git stash save
ist jetzt zugunsten vongit stash push