Git-Stash gegen Git-Zweig
In einem frühere Git-FrageDaniel Benamy Sprach über einen workflow in Git:
War ich arbeiten auf master und verpflichtet einige Sachen und dann beschlossen, ich wollte, dass die Arbeit auf halten. Ich gesichert, ein paar commits und dann verzweigt aus, bevor ich begann meine scheiß Arbeit.
Wollte er zur Wiederherstellung seiner funktionierenden Zustand zu einem früheren Zeitpunkt, ohne seinen aktuellen Veränderungen. Die Antwort auf alle Fragen drehten sich um, in verschiedener Weise, so etwas wie
git branch -m master crap_work
git branch -m previous_master master
Wie funktioniert diese vergleichen zu git stash
? Ich bin ein wenig verwirrt, versuche zu sehen, was die unterschiedliche Verwendung Fall hier, wenn es scheint wie alles git stash
tut, ist bereits behandelt Verzweigung...
@Jordi Bunster: Danke, das klärt die Sache auf. Ich denke, ich würde irgendwie als "Aufhänger" zu sein, wie eine leichte, namenlosen, Zweig. So etwas stash tun können, ein Zweig kann als gut, aber mit mehr Worten. Schön!
InformationsquelleAutor der Frage Will Robertson | 2008-09-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
'stash' nimmt die kein commit ausgeführt wurde, "dirty" Sachen auf Ihrer Arbeitskopie aus, und lagern Sie Sie Weg, damit Sie eine saubere Arbeitskopie.
Es nicht wirklich-Filiale überhaupt. Sie können dann die stash oben auf jede andere Branche. Oder, wie von Git-1.6, die Sie tun können:
gelten der Vorrat oben auf eine neue Filiale, die alle in einem einzigen Befehl.
So, stash funktioniert großartig, wenn Sie nicht begangen haben, um die "falsch" - Zweig noch.
Wenn Sie bereits begangen, dann die Workflows, die Sie in Ihrer Frage beschreiben, ist eine bessere alternative. Und übrigens, du hast Recht: Git ist sehr flexibel, und diese Flexibilität kommt überlappende Funktionen.
InformationsquelleAutor der Antwort Jordi Bunster
Wiederherstellen, wenn Sie Ihr Versteck, Ihre änderungen werden übernommen und Sie arbeiten weiter an Ihrem code.
Zu verstauen aktuelle änderungen
Können Sie auch mehr als ein Versteck. Der stash funktioniert wie ein stack. Jedes mal, wenn Sie sparen Sie eine neue stash, es ist auf der Oberseite des Stapels.
Hinweis: die
stash@{0}
Teil? Das ist dein stash-ID. Du wirst es brauchen, um Sie später wiederherstellen. Lasst uns das jetzt tun. Die stash-ID ändert sich bei jedem Versteck, die Sie machen. stash@{0} bezieht sich auf den letzten stash.Anwenden stash
Können Sie feststellen, das Versteck ist noch da, nachdem Sie es angewendet haben. Sie fallen können, wenn Sie es nicht mehr benötigen.
Oder, da der stash funktioniert wie ein stack, können Sie pop aus dem letzten stash gespeichert:
Wenn Sie möchten, wischen Sie alle Ihre Verstecke entfernt, führen Sie die 'clear' - Befehl:
Kann es sehr gut sein, dass Sie nicht verwenden, lagern, oft. Wenn Sie nur wollen, um schnell stash deine änderungen, die Sie später wiederherstellen können Sie die stash-ID.
Fühlen Sie sich frei zu Experimentieren mit dem stash, bevor Sie es auf ein paar wirklich wichtige Arbeit.
Ich habe auch eine ausführlichere version dieses gepostet auf meinem blog.
InformationsquelleAutor der Antwort Ariejan
Ich bin immer vorsichtig git-stash. Wenn Sie Bunkern ein paar mal, Dinge neigen dazu, zu chaotisch. git stash list zeigt eine nummerierte Liste der Verstecke, die Sie erstellt haben, zusammen mit Nachrichten, wenn Sie Sie... Aber das problem liegt in der Tatsache, dass Sie können nicht bereinigen lagern außer mit einem brutalen git stash clear (entfernt Sie). So, es sei denn, du bist immer anal zu geben super-beschreibende Nachrichten für Ihre Verstecke (ein bisschen geht gegen stash Philosophie), Sie am Ende mit einer unverständlichen Haufen lagern.
Die einzige Möglichkeit, die ich kenne, um herauszufinden, welche ist die gitk --all und entdecken Sie die Verstecke. Mindestens diese Weise können Sie sehen, was verpflichten, die stash erstellt wurde, sowie die diff-alles inbegriffen in diesem Versteck.
Hinweis, dass ich mit git 1.5.4.3, und ich denke, 1.6, fügt git stash pop, die ich Schätze, wäre die gewählten Versteck und es aus der Liste entfernen. Das scheint viel sauberer.
Für jetzt, ich versuche immer zu Zweig, es sei denn, ich bin absolut positiv, ich werde wieder zu diesem Versteck in der gleichen Tag, sogar in der Stunde.
InformationsquelleAutor der Antwort webmat
Wenn Sie sich für einen workflow, der vielleicht treffender als git-stash, möchten Sie vielleicht zu schauen,git-Flasche. Es ist ein Werkzeug für den Zweck der Sicherung und Wiederherstellung der verschiedenen git-Staaten arbeiten als normale git-commits, effektiv Snapshots der aktuellen und einschlägigen Stand Ihrer arbeiten Baum und alle verschiedene Datei-Staaten gezeigt, unter git status.
Wichtige Unterschiede
git stash
:git stash
speichert die schmutzigen git Staat eng (geänderte Dateien und zusätzlichen Dateien im index), währendgit-bottle
ist entworfen, um zu speichern alles das ist andersHEAD
und es unterscheidet sich in ein konservierendes Weg zwischen modifiziert, geändert und nicht Hinzugefügt, nicht Hinzugefügt, nicht zusammengeführte Pfade, und die kompletten rebase/merge-Staaten (nur Wege unter.gitignore
werden nicht gespeichert).git stash
spart zum verstauen der Objekte, die Sie brauchen, um Spur zu halten getrennt. Wenn ich etwas versteckt vor 2 Wochen ich kann mich nicht mehr daran erinnern, in der Erwägung, dassgit-bottle
speichert als vorläufig verpflichtet, den aktuellen Zweig. Die umgekehrte Handlung istgit-unbottle
was ist das äquivalent dergit stash
pop. Es ist möglich, schieben und teilen Sie diese commits zwischen Repositorys. Dies kann nützlich sein, für remote-baut, wo man ein weiteres repository in einem remote-server nur für den Aufbau oder für die Zusammenarbeit mit anderen Menschen auf die Konfliktlösung.InformationsquelleAutor der Antwort Dan Aloni