Ich brauche eine Möglichkeit, eine versteckte Änderung auf einen anderen Computer zu exportieren.
Auf Computer1 habe 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 wird. Die Frage ist jedoch, wie es wieder als Stash importiert werden kann.
Vielen Dank
git stash save
ist jetzt zugunsten vongit stash push
Antworten:
Sie können eine Patch-Datei anwenden (ohne die Änderungen noch zu übernehmen), indem Sie sie einfach ausführen
Dann können Sie einfach einen neuen Stash aus dem aktuellen Arbeitsverzeichnis erstellen:
quelle
git stash show "stash@{0}" -p > patch
anstelle des zweiten Shell-Befehls des OP.stash@{0}
..Alternativ können Sie einen Zweig aus Ihrem Vorrat (auf Computer 1) mit erstellen
Übernehmen Sie Ihre Änderungen:
Fügen Sie es dann als Fernbedienung auf Computer 2 hinzu:
Jetzt können Sie die Remote-Informationen mit abrufen
Jetzt können Sie das Commit wie gewünscht importieren. Verwenden von Git Cherry-Pick , Git Rebase oder was auch immer Sie möchten ... Wenn Sie möchten, dass es so aussieht, als hätten Sie gerade Git Stash angewendet ; Sie können Git Cherry-Pick --no-Commit verwenden.
Wenn Sie keine direkte Verbindung zwischen Computer1 und Computer2 haben; Sie können eine Fernbedienung verwenden (wie Github oder ähnliches):
und auf Computer2:
quelle
git stash list --oneline
), sodass Sie den Stash technisch nicht auf ein neues Commit-Objekt anwenden müssen. Mit anderen Worten, das Erstellen eines neuen Zweigs ist nicht erforderlich. Es ist jedoch, gelinde gesagt, schwierig, einen Stash direkt auf eine Fernbedienung zu übertragen.Alternativ können Sie die gesamten lokalen Stashes wie folgt in einen anderen Computer exportieren
git pull
in Ihrem alten und neuen Git-Verzeichnis, um sicherzustellen, dass beide die neuesten Änderungen haben.quelle
So exportieren Sie Stash in SourceTree:
Wenden Sie Ihren Vorrat darauf an und machen Sie ein Commit
Klicken Sie auf Ihr Commit und erstellen Sie einen Patch daraus. Nehmen Sie die Patch-Datei mit.
Gehen Sie zu einem anderen Repository und wählen Sie denselben übergeordneten Zweig aus, den Sie gerade in 1) verwendet haben.
Aktionen / Patch anwenden, wählen Sie Modus: Arbeitskopiedateien ändern, klicken Sie auf Patch anwenden, wenn Sie in Ihrer aktuellen Arbeitsumgebung nicht festgeschriebene Änderungen am Patch vorgenommen haben
Erstellen Sie einen neuen Stash für das aktuelle Repo
quelle
Sie können Stash als Patch-Datei von einem Computer aus erstellen und diese Patch-Datei dann für andere Computer freigeben.
Erstellen des Stashs als Patch
Das "stash @ {0}" ist die Referenz des stash. Es wird eine Patch-Datei mit dem neuesten Stash erstellt. Wenn Sie einen anderen Befehl wünschen, verwenden Sie den Befehl
$ git stash list
, um Ihre Liste der Stashes anzuzeigen und auszuwählen, welchen Sie patchen möchten.Anwenden des Patches
Ü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
Wenn ein Fehler vorliegt und Sie die Änderung rückgängig machen möchten
quelle
Eine andere Option ist
rsync
der.git
Ordner von einem Computer zu einem anderen Computer.rsync
verarbeitet nur Dateiänderungen (schneller als eine Kopie).Ein Nachteil dieses Ansatzes ist, dass die Konfigurationen ebenfalls überschrieben werden. Dies ist möglicherweise nicht erwünscht, wenn Sie unterschiedliche .git-Konfigurationen zwischen den beiden Computern ausführen. Sie können dies jedoch überwinden, indem Sie Dateien mit der
--exclude
Option in ausschließenrsync
.Insgesamt denke ich, dass eine native Git-Lösung sauberer ist, aber dieser
rsync
Hack könnte für jemanden in Eile nützlich sein, der mit rsync besser vertraut ist als mit git.quelle
Der Startbefehl aus dem ursprünglichen Beitrag:
hat bei mir nicht funktioniert (aus irgendeinem Grund wurden unbrauchbare Patch-Dateien erstellt). Stattdessen musste ich:
für jeden Vorrat wollte ich übertragen. Dann habe ich das 'Eltern'-Repo in die Datei: /// Reichweite des' Kind'-Repos gelegt und für jedes Stash-Commit Folgendes ausgeführt:
Das ist komplexer, hat aber den Trick für mich getan.
quelle
Wenn Sie Ihre Änderungen von einem Computer auf einen anderen verschieben möchten, können Sie Ihre Änderungen jederzeit auf Ihrem Computer festschreiben und dann einen Soft-Reset auf dem Computer durchführen.
Büro
git commit -m "-stash-"
Küche
git reset --soft HEAD~1
quelle
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:
stash_
+ die Nummer (n) in der logischen Stash-Ref verwendet).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:
quelle