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, speichere ich meine Änderungen in A, Kasse B, mache meine Arbeit dort, dann Kasse A und wende den Stash an.
Wenn ich an A arbeite und für diesen Tag aufhören möchte zu arbeiten, sollte ich meine Arbeit aufbewahren und sie dann am nächsten Tag anwenden (wenn ich meine Arbeit wieder aufnehme), oder sollte ich die Dinge einfach so lassen, wie sie sind - nicht festgeschriebene geänderte Dateien in der Arbeitsverzeichnis? Ich verstehe nicht, warum ich in diesem Fall Stash verwenden müsste, es sei denn, es gibt einen Sicherheitsvorteil.
Ein weiteres Szenario: Ich arbeite sowohl bei der Arbeit als auch zu Hause. Wenn ich mit einem Commit nicht fertig bin, wenn ich nach Hause gehen möchte, kann ich meine Arbeit verstauen, an GitHub senden und dann zu Hause abrufen?
Antworten:
Stash ist nur eine bequeme Methode. Da Filialen in Git so billig und einfach zu verwalten sind, ziehe ich es persönlich fast immer vor, eine neue temporäre Filiale zu erstellen, anstatt sie zu verstecken, aber es ist meistens Geschmackssache.
Der einzige Ort, an dem ich gerne verstaue, ist, wenn ich feststelle, dass ich bei meinem letzten Commit etwas vergessen habe und bereits mit der Arbeit am nächsten in derselben Branche begonnen habe:
quelle
git stash pop
zweimal spielen, verlieren Sie die Unterscheidung zwischen diesen beiden Änderungssätzen.git stash push
. Der Hauptgrund dafür ist, dassgit stash push
die Option zum Verstecken ausgewählter Pfadspezifikationen eingeführt wird , wasgit stash save
nicht unterstützt wird.Ich werde die Antwort auf drei Absätze unterbrechen.
Teil 1:
git stash
(Um Ihre nicht festgeschriebenen Änderungen in einem "Stash" zu speichern. Hinweis: Dadurch werden Änderungen aus dem Arbeitsbaum entfernt!)git checkout some_branch
(Wechsel zum vorgesehenen Zweig - in diesem Fallsome_branch
)git stash list
(Liste Verstecke)git stash apply
(um Stash auf den Arbeitsbaum im aktuellen Zweig anzuwenden)git stash apply stash@{12}
(Wenn Sie viele Verstecke haben, können Sie auswählen, welche Verstecke angewendet werden sollen. In diesem Fall wenden wir Verstecke an.12
)git stash drop stash@{0}
(aus der Versteckliste entfernen - in diesem Fall Versteck0
)git stash pop stash@{1}
(um den ausgewählten Stash anzuwenden und ihn aus der Stash-Liste zu löschen)Teil 2:
Sie können Ihre Änderungen mit diesem Befehl ausblenden, dies ist jedoch nicht erforderlich.
Sie können am nächsten Tag ohne Versteck weitermachen.
Diese Befehle dienen zum Ausblenden Ihrer Änderungen und zum Arbeiten an verschiedenen Zweigen oder zum Implementieren einer gewissen Realisierung Ihres Codes und zum Speichern in Verstecken ohne Zweige und zum Festschreiben Ihres benutzerdefinierten Falls!
Und später können Sie einige Verstecke verwenden und prüfen, welche besser sind.
Teil 3:
Stash-Befehl zum lokalen Ausblenden Ihrer Änderungen.
Wenn Sie remote arbeiten möchten, müssen Sie sich verpflichten und pushen.
quelle
Die Hauptidee ist
Der Befehl "Basicallly Stash" behält also einige Änderungen bei, die Sie im Moment nicht benötigen oder wollen. aber Sie können sie brauchen.
quelle
Sie können die folgenden Befehle verwenden:
Um Ihre nicht festgeschriebenen Änderungen zu speichern
git stash
Zum Auflisten Ihrer gespeicherten Vorräte
git stash list
Um die nicht festgeschriebenen Änderungen anzuwenden / zurückzugewinnen, wobei x 0,1,2 ist ...
git stash apply stash@{x}
So wenden Sie einen Stash an und entfernen ihn aus der Stash-Liste
git stash pop stash@{x}
So wenden Sie einen Stash an und behalten ihn in der Stash-Liste
git stash apply stash@{x}
quelle
Wenn Sie auf klicken,
git stash
wenn Sie Änderungen an der Arbeitskopie haben (nicht im Staging-Bereich), erstellt git ein verstecktes Objekt und schiebt es auf den Stapel von Stashes (genau wie Sie,git checkout -- .
aber Sie werden keine Änderungen verlieren). Später können Sie von der Oberseite des Stapels springen.quelle
Mit dem Befehl stash werden alle Änderungen gespeichert, 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 stash nur verwenden, um Änderungen rückgängig zu machen, die Sie nicht festschreiben möchten.
quelle
git stash
wird Ihren Zweig nicht ändern. Insbesondere werden festgeschriebene Änderungen nicht "zurückgesetzt". Nicht festgeschriebene Änderungen an Ihren Dateien werden nur (vorübergehend) verworfen. - Es mag wählerisch erscheinen, aber diese Art von Wörtern hat im Zusammenhang mit Git eine ganz besondere Bedeutung. Sie sollten diese wirklich nicht verwechseln.git stash
berührt keine Commits und ändert daher überhaupt keinen Zweig. Es wird nichts aus einem Zweig "entfernen" und es wird in keiner Weise "zurückgesetzt". Der Zweig bleibt gleich, nur die Dateien im Arbeitsbaum ändern sich. - Das sind zwei völlig verschiedene Dinge.Ich weiß, dass StackOverflow nicht der Ort für meinungsbasierte Antworten ist, aber ich habe tatsächlich eine gute Meinung darüber, wann Änderungen mit einem Stash zurückgestellt werden müssen.
Sie möchten keine experimentellen Änderungen vornehmen
Wenn Sie Änderungen an Ihrem Arbeitsbereich / Arbeitsbaum vornehmen und verzweigungsbasierte Vorgänge wie Zusammenführen, Drücken, Abrufen oder Ziehen ausführen müssen, müssen Sie sich an einem sauberen Festschreibungspunkt befinden. Wenn Sie also Änderungen am Arbeitsbereich haben, müssen Sie diese festschreiben. Aber was ist, wenn Sie sie nicht festlegen möchten? Was ist, wenn sie experimentell sind? Etwas, das Sie nicht in Ihre Commit-Historie aufnehmen möchten? Etwas, das andere nicht sehen sollen, wenn Sie auf GitHub pushen?
Sie möchten lokale Änderungen nicht durch einen Hard-Reset verlieren
In diesem Fall können Sie einen Hard-Reset durchführen. Wenn Sie jedoch einen Hard-Reset durchführen, verlieren Sie alle Änderungen Ihres lokalen Arbeitsbaums, da alles dort überschrieben wird, wo es zum Zeitpunkt des letzten Commits war, und Sie alle Ihre Änderungen verlieren.
Die Antwort auf "Wann sollten Sie sich verstecken?" Lautet, wenn Sie mit einem synchronisierten Arbeitsbaum / Index / Commit zu einem sauberen Festschreibungspunkt zurückkehren müssen, aber Ihre lokalen Änderungen in nicht verlieren möchten der Prozess. Bewahren Sie Ihre Änderungen einfach in einem Vorrat auf, und Sie sind gut.
Und sobald Sie Ihren Stash erledigt und dann zusammengeführt oder gezogen oder geschoben haben, können Sie einfach Pop verstauen oder anwenden und sind wieder da, wo Sie angefangen haben.
Git Stash und GitHub
GitHub fügt ständig neue Funktionen hinzu, aber ab sofort gibt es die Möglichkeit, dort einen Vorrat zu speichern. Wieder ist die Idee eines Versteckes, dass es lokal und privat ist. Niemand sonst kann ohne physischen Zugriff auf Ihre Workstation in Ihren Vorrat schauen. Auf die gleiche Weise ist Git Reflog privat und das Git Log ist öffentlich. Es wäre wahrscheinlich nicht privat, wenn es auf GitHub hochgeschoben würde.
Ein Trick könnte darin bestehen, einen Unterschied in Ihrem Arbeitsbereich zu machen, den Unterschied in Ihrem Git-Repository einzuchecken, festzuschreiben und dann zu pushen. Dann können Sie von zu Hause aus ziehen, das Diff holen und es dann abwickeln. Aber das ist ein ziemlich chaotischer Weg, um diese Ergebnisse zu erzielen.
quelle