In einer früheren Git-Frage sprach Daniel Benamy über einen Workflow in Git:
Ich arbeitete am Master und engagierte einige Sachen und entschied dann, dass ich diese Arbeit auf Eis legen wollte. Ich habe ein paar Commits gesichert und mich dann verzweigt, bevor ich mit meiner Mistarbeit angefangen habe.
Er wollte seinen Arbeitszustand zu einem früheren Zeitpunkt wiederherstellen, ohne seine aktuellen Änderungen zu verlieren. Alle Antworten drehten sich auf verschiedene Weise um so etwas wie
git branch -m master crap_work
git branch -m previous_master master
Wie ist das zu vergleichen git stash
? Ich bin ein bisschen verwirrt, wenn ich versuche zu sehen, was der unterschiedliche Anwendungsfall hier ist, wenn es so aussieht, als würde alles git stash
bereits durch Verzweigung behandelt ...
@ Jordi Bunster : Danke, das klärt die Dinge auf. Ich denke, ich würde "Verstauen" als einen leichten, namenlosen Zweig betrachten. Alles, was Stash kann, kann auch verzweigen, aber mit mehr Worten. Nett!
git stash list
Suchen Sie nach den Namen Ihrer Verstecke.git stash show -u
um einen Unterschied des Versteckes gegen die Arbeitskopie zu zeigen.Wenn Sie Ihren Stash wiederherstellen, werden Ihre Änderungen erneut übernommen und Sie arbeiten weiter an Ihrem Code.
Um Ihre aktuellen Änderungen zu speichern
Sie können auch mehr als einen Vorrat haben. Der Stash funktioniert wie ein Stapel. Jedes Mal, wenn Sie einen neuen Vorrat speichern, wird dieser auf den Stapel gelegt.
Beachten Sie das
stash@{0}
Teil ? Das ist dein Versteckausweis. Sie benötigen es, um es später wiederherzustellen. Lass uns das jetzt machen. Die Stash-ID ändert sich mit jedem von Ihnen erstellten Stash. stash @ {0} bezieht sich auf den zuletzt von Ihnen erstellten Stash.Ein Versteck anwenden
Möglicherweise stellen Sie fest, dass der Stash noch vorhanden ist, nachdem Sie ihn angewendet haben. Sie können es fallen lassen, wenn Sie es nicht mehr benötigen.
Da sich der Stash wie ein Stapel verhält, können Sie den zuletzt gespeicherten Stash entfernen:
Wenn Sie alle Ihre Vorräte wegwischen möchten, führen Sie den Befehl 'clear' aus:
Es kann sehr gut sein, dass Sie nicht so oft Stashes verwenden. Wenn Sie Ihre Änderungen nur schnell speichern möchten, um sie später wiederherzustellen, können Sie die Stash-ID weglassen.
Probieren Sie den Vorrat aus, bevor Sie ihn für wirklich wichtige Arbeiten verwenden.
Ich habe auch eine ausführlichere Version davon in meinem Blog veröffentlicht .
quelle
Ich bin immer vorsichtig mit Git Stash. Wenn Sie ein paar Mal verstauen, neigen die Dinge dazu, chaotisch zu werden. Die Git-Stash-Liste zeigt eine nummerierte Liste der von Ihnen erstellten Stashes mit Nachrichten an, sofern Sie diese bereitgestellt haben. Das Problem liegt jedoch in der Tatsache, dass Sie Stashes nur bereinigen können, wenn ein brutaler Git-Stash gelöscht wird (wodurch alle entfernt werden). . Wenn Sie also nicht immer anal sind, wenn Sie überaus beschreibende Nachrichten für Ihre Verstecke geben (was irgendwie gegen die Philosophie von Stash verstößt), erhalten Sie eine unverständliche Reihe von Verstecken.
Der einzige Weg, den ich kenne, um herauszufinden, welcher der ist, ist gitk - all und finde die Verstecke. Zumindest können Sie so sehen, auf welchem Commit der Stash erstellt wurde und wie unterschiedlich alles ist, was in diesem Stash enthalten ist.
Beachten Sie, dass ich git 1.5.4.3 verwende und ich denke, dass 1.6 git stash pop hinzufügt, was den ausgewählten Stash vermutlich anwenden und aus der Liste entfernen würde. Welches scheint viel sauberer.
Im Moment versuche ich immer, mich zu verzweigen, es sei denn, ich bin mir absolut sicher, dass ich am selben Tag, sogar innerhalb einer Stunde, zu diesem Vorrat zurückkehren werde.
quelle
git stash drop [<stash>]
Wenn Sie nach einem Workflow suchen, der möglicherweise besser passt als Git Stash, sollten Sie sich Git-Bottle ansehen . Es ist ein Dienstprogramm zum Speichern und Wiederherstellen der verschiedenen Git-Arbeitszustände als normale Git-Commits, mit dem der aktuelle und relevante Status Ihres Arbeitsbaums und alle verschiedenen Dateistatus, die unter Git-Status angezeigt werden , effektiv erfasst werden .
Hauptunterschiede zu
git stash
:git stash
speichert den Dirty-Git-Status eng (geänderte Dateien und hinzugefügte Dateien im Index), wohingegen alles gespeichertgit-bottle
wird, wasHEAD
sich von modifizierten, modifizierten und nicht hinzugefügten, nicht hinzugefügten, nicht zusammengeführten Pfaden unterscheidet , und auf bewahrte Weise unterscheidet. und die vollständigen Rebase / Merge-Zustände (nur Pfade unter.gitignore
werden nicht gespeichert).git stash
speichert, um Objekte zu verstauen, die Sie separat verfolgen müssen. Wenn ich vor 2 Wochen etwas verstaut habe, kann ich mich möglicherweise nicht daran erinnern, während esgit-bottle
als vorläufige Zusage für die aktuelle Niederlassung gespeichert wird . Die umgekehrte Aktiongit-unbottle
entspricht demgit stash
Pop. Es ist möglich, diese Commits zu übertragen und auf Repositorys zu verteilen. Dies kann für Remote-Builds nützlich sein, bei denen Sie ein anderes Repository auf einem Remote-Server nur zum Erstellen oder zur Zusammenarbeit mit anderen Personen bei der Konfliktlösung haben.quelle