2017-02-21 3 views
5
  • Ich habe anhängig uncommitted Werke
  • Ich brauche für einige dringenden Arbeiten
  • Da meine aktuelle Work in Progress zu einem anderen Zweig wechseln nicht fertig ist, ich weiß nicht, es begehen will. Ich verwende git stash, um es beiseite zu legen.

Darüber hinaus möchte ich diesen Stash-Inhalt auf einem freigegebenen Laufwerk sichern. Nur zur Sicherheit. Was ist eine elegante Lösung, um den Inhalt des Stash in der Datei zu archivieren?Wie wird der Git Stash Inhalt gesichert?

Antwort

9

Sie können die diff erhalten, indem Show Befehl ausführen:

git stash show -p > stash.diff 

Dies ist der Diff-Datei, die Sie als Backup verwenden können.

Später können Sie die diff auf das vorhandene Repository gelten:

git apply stash.diff 
# and potentially stash again: 
git stash 
+0

Das hilft !!!! – VinayVeluri

+0

@Zbynek 'git stash show' sagt nur" MyProject/MyFile.scala | 34 +++++ "1 Datei geändert, 34 Einfügungen (+). Wenn ich diesen "Statusbericht" sichern möchte (der in stash.diff gemäß Ihrer Anweisung erfasst wird). Nehmen wir an, meine Festplatte hat Probleme, nachdem ich das Backup erstellt habe. Wie weiß stash.diff über den tatsächlichen Inhalt der 34 Zeilen, die ich in die MyFile.scala-Datei geschrieben habe? – Polymerase

+0

@Polymerase: Sorry, ich habe das '-p' verpasst (das ist Standard für' diff', aber nicht für 'stash'). Antwort aktualisiert –

5

Ich will nicht begehen, es

Eigentlich git stash arbeitet mit zwei Commits machen (manchmal) drei Wenn du deine Arbeit verschachtest, hast du es vielleicht begangen, ohne es zu wissen. Aber die meiste Zeit ist nichts falsch daran, einen temporären Commit zu machen. Können Sie den aktuellen Arbeit, hinzufügen und dann eine temporäre machen begehen über:

git commit -m 'WIP' 

Dann Sie verzweigen auf das Repository schieben kann, und das sollte als Sicherung dienen. Wenn Sie zurückkommen, die Arbeit zu beenden, können Sie ändern, dass die vorübergehende begehen über:

git commit --amend 

Fühlen Sie sich frei um die Nachricht etwas Sinnvolles zu ändern, aber in jedem Fall die WIP kann als Erinnerungsnachricht dienen.

Wenn der Zweig, an dem Sie arbeiten, von anderen geteilt werden kann, können Sie Ihren Zweig mit dem temporären Commit an einen anderen Speicherort als Sicherung verschieben, z.

git push origin local_branch:some_other_location 
+0

+1 für 'git commit --amend', @Tim, gibt es wie eine temporäre, die über etwas wie E-Mail geteilt werden kann und auf einem anderen Rechner anwenden und commit? – VinayVeluri

+0

@VinayVeluri Sehen Sie sich die andere Antwort an, die sich damit befasst. In jedem Fall können Sie Zweige immer teilen, daher kann ein temporäres Commit genauso wie jedes andere Commit geteilt werden. –

+0

Gotcha, das ist, was wir normalerweise tun, prüfen, ob wir einen anderen Weg haben. – VinayVeluri

2

Wie Tim Biegeleisen sagte git stash tatsächlich schafft ein begehen - es funktioniert einfach nicht um alle Ihre Zweige zu bewegen.

Sie können auf Ihren letzten versteckten Inhalt über [email protected]{0} zugreifen (der vorletzte durch [email protected]{1}, etc ... git stash list, um eine vollständige Liste dessen, was Sie zugreifen können) anzuzeigen.

Die einfachste Art und Weise sehe ich ein Versteck mehr persistent zu machen ist: eine Niederlassung erstellen:

$ git branch wip/adding/new/feature [email protected]{0} 

Jetzt, mit einem Zweig auf das Gerät gerichtet, diese gebunkert Inhalte werden nicht auslaufen übertragen, wenn Sie klonen oder holen aus diesem Repo, etc ...

Der einfachste Weg, ein Repo-Backup ist es zu klonen:

$ cd path/to/external/drive 
$ git clone my/repo 

# you can then update your backup by running : 
$ git fetch   # from the clone 

werden dadurch alle Zweige und Tags in Ihrer ursprünglichen Repo definiert speichern.

+0

danke, aber das ist Overkill, nur um eine temporäre Arbeit für eine kurze Zeit zu speichern. Der Stash-Inhalt kann 1K sein. Die Sicherung eines ganzen Repos könnte 1 Million mal größer sein. Sorry für meine Anfänger-Art zu tun, aber ich denke, es ist noch einfacher, nur meine Temp-Arbeit zu begehen und es später rückgängig zu machen. – Polymerase