Wie kann ich ein Geschenk teilen?

32

Gibt es eine Möglichkeit, einen Stash in git zu teilen?

Ich arbeite an mehreren Maschinen und möchte oft meinen aktuellen Arbeitszustand von einer zur anderen verschieben können.

Ich suche nach einer Möglichkeit, einen Stash von einem Klon zu einem anderen zu verschieben / zu ziehen und ihn entweder als Stash für den anderen Klon oder als scheinbaren Remote-Zweig anzuzeigen. Ich erwarte nicht, dass Ersteres unbedingt funktionieren wird, wenn die Fernbedienung jedoch bereits über einen eigenen Stash verfügt.

Angesichts der Tatsache, dass Stash (anscheinend) bereits ein Zweig mit Commits ist, suche ich nicht nach Lösungen im Sinne von "Commit jedes Stashs für einen Zweig und teile diese dann" - ich habe bereits viele, viele Zweige. Ich bin daher auf der Suche nach dem refspec oder ähnlichem, mit dem ich das Drücken / Ziehen steuern kann.

PeterJCLaw
quelle

Antworten:

26

Der Stash ist nur stashoder refs/stash, den Sie an einen entfernten Zweig senden können:

git push origin stash@{2}:refs/heads/otherstash

Git wird es jedoch ablehnen, direkt darauf zu refs/stashpushen. Außerdem scheint es keine Möglichkeit zu geben, ganze Reflogs zu verschieben , in denen vorherige Verstecke gespeichert sind.

Grawity
quelle
6
git push origin $(for sha in $(git rev-list -g stash); do echo $sha:refs/heads/stash_$sha; done)sollte gut für alle Verstecke tun; Siehe auch stackoverflow.com/a/5248758/85371
siehe
11

Es ist nicht so gut integriert wie ein, git pushaber um das Erstellen von Zweigen zu vermeiden, verwende ich git stash show -p > change.patch(nach dem Speichern der Änderungen) oder git diff --cached > change.patcherstelle sogar einen Patch, von dem aus ich git apply change.patchauf dem nächsten Computer arbeite.

Mit dieser Lösung ist zumindest dann, wenn viele Dateien in Ihrem aktuellen Arbeitszustand geändert wurden, alles in einer einzigen Dateneinheit enthalten.

Neo
quelle
Ja, aber wie ? git stash -p fragt mich nur interaktiv nach jedem Hunk und spuckt dann eine lange Schlange aus, die ich nicht verstehe. Wo ist dieser "Patch", den ich auf eine andere Maschine mitnehmen kann? und was ist der git verborgen? und wie verwendest du git? Können Sie das bitte etwas näher erläutern?
Motti Shneor
Ich habe meine Antwort detailliert und korrigiert
Neo
4

Sie können einen Patch erstellen und an jemanden senden. Sie müssen es nur anwenden.

git diff >> file.diff

quelle
3
Beachten Sie, dass dies nur für Objekte funktioniert, die ein Diff erzeugen. Achten Sie bei der Ausgabe auf "Binärdateien unterscheiden sich".
Liam