2013-12-12 6 views
23

Wenn ich an Zweig A arbeite und plötzlich an Zweig B arbeiten muss, bevor ich mit einem Commit für Zweig A fertig bin, verstaue ich meine Änderungen an A, checke B, erledige meine Arbeit dort, checke dann A und lege den Stash an.Wann sollte ich den Git Stash verwenden?

Wenn ich an A arbeite und die Arbeit für den Tag einstellen möchte, sollte ich meine Arbeit speichern und sie am nächsten Tag anwenden, wenn ich meine Arbeit fortsetze oder die Dinge einfach so lassen sollte, wie sie sind - nicht festgeschrieben modifiziert Dateien im Arbeitsverzeichnis. Ich sehe nicht, warum ich in diesem Fall einen Stash verwenden müsste, außer wenn es einen Sicherheitsvorteil gibt.

Auch ein anderes Szenario - ich arbeite sowohl bei der Arbeit als auch zu Hause. Wenn ich nicht bereit bin mit einem Commit, wenn ich nach Hause gehen will, kann ich meine Arbeit verschenken, sie zu GitHub schieben und dann diesen Stash zu Hause ziehen?

Antwort

31

Stash ist nur eine bequeme Methode. Da Zweige in git so billig und einfach zu verwalten sind, bevorzuge ich es fast immer, einen neuen temporären Zweig zu erstellen, aber es ist meistens Geschmackssache.

Der einzige Ort, den ich wie stashing tun ist, wenn ich entdecken vergaß ich etwas in meinem letzten begehen und haben bereits begonnen, auf die nächste in der gleichen Branche arbeiten:

# Assume the latest commit was already done 
# start working on the next patch, and discovered I was missing something 

# stash away the current mess I made 
git stash save 

# some changes in the working dir 

# and now add them to the last commit: 
git add -u 
git commit --ammend 

# back to work! 
git stash pop 
1

Der Stash-Befehl speichert alle Änderungen, die Sie seit Ihrem letzten Commit vorgenommen haben. In Ihrem Fall gibt es keinen Grund, sich zu verstecken, wenn Sie am nächsten Tag weiter daran arbeiten. Ich würde nur Stash verwenden, um Änderungen rückgängig zu machen, die Sie nicht festlegen möchten.

+0

Nein, 'git stash' wird Ihren Zweig nicht ändern. Es wird insbesondere keine festgeschriebenen Änderungen rückgängig machen. Es wird nur nicht festgeschriebene Änderungen an Ihren Dateien (vorübergehend) verwerfen. - Es mag wählerisch erscheinen, aber diese Art von Wörtern haben im Zusammenhang mit Git eine ganz besondere Bedeutung. Du solltest das wirklich nicht vermischen. – michas

+0

Vielen Dank, dass Sie darauf hingewiesen haben. Ich habe meine Antwort entsprechend geändert. – Severin

+0

In git ist eine "Verzweigung" als eine Reihe von Commits definiert. 'git stash' wird keine Commits berühren und daher auch keinen Zweig verändern. Es wird nichts von einem Zweig "entfernen" und es wird es in keiner Weise "zurücksetzen". Der Zweig bleibt unverändert, nur die Dateien im Arbeitsbaum ändern sich. - Das sind zwei völlig verschiedene Dinge. – michas

0

Wenn Sie git stash treffen, wenn Sie Änderungen in der Arbeitskopie (nicht in der Staging-Bereich), erstellt Git ein verschachteltes Objekt und schiebt auf den Stapel von Stashes (genau wie Sie git checkout -- ., aber Sie werden keine Änderungen verlieren). Später können Sie von oben nach unten springen.