
Marcelo A
Ich brauche eine Möglichkeit, eine gespeicherte Änderung auf einen anderen Computer zu exportieren.
Auf Computer 1 tat ich
$ git stash save feature
Ich versuche, den Stash-Patch in eine Datei zu bringen und ihn dann auf einen anderen Computer zu importieren
$ git stash show -p > patch
Dieser Befehl gibt mir eine Datei, die ich auf einen anderen Computer verschieben kann, auf dem dieses Repo geklont ist, aber die Frage ist, wie ich es wieder als Stash importieren kann.
Sie können eine Patch-Datei anwenden (ohne die Änderungen noch festzuschreiben), indem Sie sie einfach ausführen
git apply patchfile
Dann können Sie einfach einen neuen Stash aus dem aktuellen Arbeitsverzeichnis erstellen:
git stash
Sie können Stash als Patch-Datei von einem Computer erstellen und diese Patch-Datei dann für andere Computer freigeben.
Stash als Patch erstellen
$ git stash show "[email protected]{0}" -p > changes.patch
„[email protected]{0}“ ist die Referenz des Stash. Es wird eine Patch-Datei mit dem neuesten Stash erstellt. Wenn Sie einen anderen Befehl verwenden möchten $ git stash list
um Ihre Liste mit Stashes anzuzeigen und auszuwählen, welches Sie patchen möchten.
Anwenden des Pflasters
Übertragen Sie diesen Stash nun auf einen anderen Computer und fügen Sie ihn in den Stammordner Ihres Projekts ein. Führen Sie dann diesen Befehl aus
$ git apply changes.patch
Wenn ein Fehler vorliegt und Sie die Änderung rückgängig machen möchten
$ git apply changes.patch --reverse

Chris Maes
Alternativ können Sie einen Zweig aus Ihrem Stash (auf Computer 1) erstellen, indem Sie verwenden
git stash branch stashed_changes_branch
Bestätigen Sie Ihre Änderungen:
git commit -a
fügen Sie es dann als Remote auf Computer 2 hinzu:
git remote add pc1 [email protected]:/path/to/repo
Jetzt können Sie die Remote-Informationen mit abrufen
git fetch pc1
Jetzt können Sie den Commit wie gewünscht importieren. verwenden git Kirschpickel, Git-Rebase oder was auch immer Sie möchten … Wenn Sie möchten, dass es so aussieht, wie Sie es gerade getan haben git stash anwenden; Sie können verwenden git cherry-pick –no-commit.
Wenn Sie keine direkte Verbindung zwischen Computer1 und Computer2 haben; Sie können eine Fernbedienung verwenden (wie Github oder ähnliches):
git push origin stashed_changes_branch
und auf computer2:
git fetch

shafeeq
Alternativ können Sie die gesamten lokalen Stashes (+ andere lokale Branches, lokale Tags usw.) wie folgt auf einen anderen Computer kopieren:
git pull
sowohl in Ihrem alten als auch in Ihrem neuen Git-Verzeichnis, um sicherzustellen, dass beide die neuesten Änderungen haben (Oder stellen Sie sicher, dass beide Repos dasselbe haben HEAD
verwenden git reset --hard commit-hash
).
- Kopiere das .git Ordner aus dem alten Git-Verzeichnis in das neue Repository

KEMBL
So exportieren Sie Stash in SourceTree:
- Erstellen Sie einen neuen Zweig “StashTransfer” aus einem Zweig, in dem Sie Ihren Stash verwenden werden
-
Wenden Sie Ihren Vorrat darauf an und machen Sie einen Commit
-
Klicken Sie auf Ihr Commit und erstellen Sie daraus einen Patch, nehmen Sie die Patch-Datei mit.
-
Gehen Sie zu einem anderen Repository, wählen Sie denselben übergeordneten Zweig aus, den Sie gerade in 1) verwendet haben.
-
Aktionen / Patch anwenden, wählen Sie Modus: Arbeitskopiedateien ändern, drücken Sie Patch anwenden, jetzt haben Sie nicht festgeschriebene Änderungen aus dem Patch in Ihrer aktuellen Arbeitsumgebung
-
Erstellen Sie einen neuen Stash für das aktuelle Repo
Eine andere Möglichkeit ist rsync
der .git
Ordner von einem Computer auf einen anderen Computer. rsync
verarbeitet nur Dateiänderungen (schneller als eine Kopie).
Ein Nachteil dieses Ansatzes ist, dass die Konfigurationen auch überschrieben würden, was möglicherweise nicht erwünscht ist, wenn Sie unterschiedliche .git-Konfigurationen zwischen den beiden Computern ausführen. Aber Sie könnten dies überwinden, indem Sie Dateien mit der ausschließen --exclude
Möglichkeit ein rsync
.
Insgesamt denke ich, dass eine native Git-Lösung sauberer ist, aber das hier rsync
hack könnte für jemanden in Eile nett sein, der mit rsync besser vertraut ist als mit git.
Ein Stash ist ein spezielles Zusammenführungs-Commit des Arbeitsbaums zwischen dem Basis-Commit und dem Index. Eine Möglichkeit könnte darin bestehen, jeden als separate Patches zu speichern, den ersten übergeordneten Stash auszuchecken, den Index und den Arbeitsbaum aus den beiden Patches wiederherzustellen und schließlich den Stash wiederherzustellen (eine Antwort scheint so zu gehen).
Dies ist erforderlich, um alle Informationen aus dem Stash vollständig neu zu erstellen, und wenn Sie sich darum nicht kümmern, sollten Sie zumindest den ersten Elternteil des Stashs vor der Wiederherstellung auschecken, um Konflikte zu vermeiden und zu verfolgen, wo der Stash erstellt wurde.
Dies ist, was ich getan habe, um alle Stashes 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-Referenzen
- Markieren Sie Ihre Stash-Refs, damit Sie sie mit git fetch abrufen können (die Tag-Namen spielen keine Rolle, ändern Sie sie, wenn es einen Konflikt gibt. Ich habe verwendet
stash_
+ die Nummer(n) im logischen Stash ref)
- 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 git 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 reichen …) Sie könnten auch eine Variable erhöhen, z stash_$((i++))
wenn Ihre Shell dies nicht unterstützt ${param//pattern}
Jetzt im neuen Repo für jede Referenz:
- Rufen Sie die Referenz aus dem alten Repo ab (wir müssen nicht einmal die Tag-Namen verwenden, da wir sie mit Tags versehen haben, können wir sie mit git fetch abrufen)
- Importieren Sie den Stash erneut aus dem Verweis und verwenden Sie den Betreff dieses Verweises als Stash-Nachricht.
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
10019100cookie-checkExportieren Sie einen Stash auf einen anderen Computeryes
Fyi
git stash save
ist jetzt zugunsten von veraltetgit stash push
– Ewan
11. August 2019 um 11:13 Uhr
Unglücklicherweise,
git stash show
ignoriert nicht nachverfolgte Dateien, selbst wenn sie zwischengespeichert sind.– Andrzej Wąsowski
8. Juni 2021 um 6:46 Uhr
@AndrzejWąsowski verrücktes Timing: zwei Tage vor deinem Kommentar,
git 2.32.0
wurde mit entlassen[-u|--include-untracked|--only-untracked]
zumgit stash show
. Meine Ersatzbefehle für die in Frage kommenden sind jetztgit stash push --include-untracked
undgit stash show --include-untracked --patch > patch
.– Ben Stuten
16. August 2021 um 19:10 Uhr