Wie Sie Ihre Änderungen mit dem zugehörigen Namen in Git verstauen und danach wiederfinden
Entwickler müssen oft Multitasking betreiben. Möglicherweise arbeiten Sie an einer neuen Funktion und Sie möchten möglicherweise einen Fehler beheben. Oder Sie sind der leitende Entwickler in mehreren Projekten.
Wenn Sie zwischen Aufgaben wechseln, möchten Sie manchmal keine unerledigten Arbeiten festlegen. In diesen Fällen kann der Befehl git stash eine große Hilfe sein. Es ermöglicht Ihnen, Ihre Änderungen zu stapeln und später zu der unvollendeten Arbeit zurückzukehren, ohne unnötige Commits zu Ihren Git-Repositorys hinzuzufügen.
Ein Workflow für Git Stash
Lassen Sie uns einen Git-Master-Zweig initialisieren und eine Datei ReadMe übertragen commit.TXT.
$ mkdir mein_projekt$ cd mein_projekt/
$ git init
$ ReadMe berühren.TXT
$ git add -A
$ git commit -m "Initialisieren"
Jetzt fügen wir eine weitere Datei namens a . hinzu.txt an den Master-Zweig.
$ berühren a.TXT$ git add -A
$ git commit -m "Hinzugefügt a.TXT"
Wenn Sie den Verlauf überprüfen, sehen Sie:
$ git log --onelined79f7aa Hinzugefügt a.TXT
9434d7e Initialisieren
Jetzt erstellen wir einen Feature1-Zweig und fügen ein b . hinzu.txt-Datei:
$ git branch-Funktion1 feature$ git Checkout-Funktion1
$ berühren b.TXT
$ git add -A
$ git commit -m "Hinzugefügt b.TXT"
Öffne dein b.txt-Datei in einem Editor und in die Zeile:
Ich bin dabei, dies zu ändern in…Und speichere die Datei. Wenn Sie Ihren Git-Status überprüfen, sehen Sie Folgendes:
$git-StatusAuf Zweigfunktion1
Änderungen, die nicht für Commit bereitgestellt werden:
(benutze "git add
(benutze "git checkout" --
geändert: b.TXT
keine Änderungen zum Commit hinzugefügt (verwenden Sie "git add" und/oder "git commit -a")
Angenommen, Sie erhalten zu diesem Zeitpunkt eine Aufforderung zur Aktualisierung der a.txt-Datei im Master-Zweig. Aber du bist noch nicht fertig mit dem b.txt-Datei. Wenn Sie versuchen, den Master-Zweig auszuchecken, erhalten Sie die folgende Fehlermeldung:
$ git checkout mastererror: Ihre lokalen Änderungen an den folgenden Dateien würden beim Checkout überschrieben:
b.TXT
Bitte übertragen Sie Ihre Änderungen oder speichern Sie sie, bevor Sie die Branche wechseln können.
Abbrechen
Aber Sie wollen die unvollendete Arbeit nicht in b . begehen.TXT. Sie können den Git-Stash in dieser Situation verwenden:
$ git stashArbeitsverzeichnis und Indexstatus WIP auf Feature1 gespeichert: 2cfe39b Hinzugefügt b.TXT
HEAD ist jetzt bei 2cfe39b Hinzugefügt b.TXT
Wenn Sie b ankreuzen.txt, sie sollte leer sein:
$ Katze b.TXT$
Wenn Sie den Stash überprüfen, sehen Sie:
$ git Stash-Listestash@0: WIP auf Feature1: 2cfe39b Hinzugefügt b.TXT
Wenn Sie versuchen, den Master-Zweig auszuchecken, sollten Sie dies jetzt tun können:
$ git checkout masterAuf Zweig 'master' gewechselt
Angenommen, Sie nehmen die erforderlichen Änderungen am Master vor und kehren dann zum Zweig Feature1 zurück:
$ git Checkout-Funktion1Dein B.txt ist noch leer:
$ Katze b.TXT$
Aber wenn Sie die Änderungen mit dem folgenden Befehl aus dem Stash abrufen:
$ git stash anwendenAuf Zweigfunktion1
Änderungen, die nicht für Commit bereitgestellt werden:
(benutze "git add
(benutze "git checkout" --
geändert: b.TXT
keine Änderungen zum Commit hinzugefügt (verwenden Sie "git add" und/oder "git commit -a")
Der Befehl stash apply hat die gespeicherten Änderungen übernommen und auf b . angewendet.txt-Datei
Sie können Ihre Arbeit in b . abschließen.txt meine Änderung der Zeile
Zu
Fahren Sie jetzt fort und übernehmen Sie Ihre Änderungen:
$ git add -A$ git commit -m "Geändert b.TXT"
Das Anwenden eines Stashs entfernt ihn nicht automatisch aus dem Stash. Sie müssen es manuell bereinigen:
$ git stash dropVerlorene Refs/Stash@0 (0a66a16b32633e8d564d08e38254c491c1b1d3be)
Warum Git Stash mit Name?
Der Git-Stash ist ein Stack. Damit Sie Ihre Änderungen weiter stapeln können.
Angenommen, Sie fügen „X“ zu b . hinzu.txt, verstaue es, füge ein "Y" zu b hinzu.txt, verstaue es und füge ein "Z" zu b hinzu.txt und verstaue es. Wenn Sie den Stash-Verlauf überprüfen, sehen Sie etwa Folgendes:
$ git Stash-Liste[email protected]0: WIP auf Feature1: 2d6f515 Geändert b.TXT
[email protected]1: WIP auf Feature1: 2d6f515 Geändert b.TXT
[email protected]2: WIP auf Feature1: 2d6f515 Modified b.TXT
Du hast keine Möglichkeit zu wissen, welcher Vorrat welches Wechselgeld enthält. Wenn Sie stashen, können Sie die Speicheroption verwenden, um Kommentare abzugeben. Sie können die Kommentare verwenden, um Ihrem Stash einen Namen zu geben und ihn erkennbar zu machen:
$ git stash speichern "X"Gespeichertes Arbeitsverzeichnis und Indexstatus Bei Funktion1: X
KOPF ist jetzt bei 2W6f515 Modifiziert b.TXT
Für das Hinzufügen von "X", "Y" und "Z"-Modifikationen können Sie Folgendes in Ihrem Stash erhalten, indem Sie die Speicheroption für jeden Stash verwenden:
$ git Stash-Listestash@0: Auf Funktion1: Z
stash@1: Bei Funktion1: Y
stash@2: Auf Funktion1: X
Jetzt haben Sie einen Namen für jede Änderung, die Sie gespeichert haben. Leider kannst du den Namen nicht verwenden, um den Vorrat abzurufen. Sie müssen die Stash-Nummer verwenden. Angenommen, Sie möchten Ihr „Y“-Wechselgeld erhalten. Sie sehen, dass [email protected]1 Y ist. Sie können diese Änderung also auf Ihren aktuellen Zweig anwenden:
$ git stash apply stash@1Und dein b.txt sollte die Änderungen von [email protected]1 enthalten.
Sie können die gleiche Methode verwenden, um einen Vorrat abzulegen. Angenommen, Sie stellen fest, dass Sie den X-Vorrat nicht mehr benötigen. Sie können einfach den folgenden Befehl verwenden, um diesen Stash zu löschen:
$ git stash drop stash@2Und der Vorrat sollte weg sein:
$ git Stash-Listestash@0: Auf Funktion1: Z
stash@1: Bei Funktion1: Y
Denken Sie daran, dass, wenn Sie die Apply- und Drop-Optionen ohne Parameter verwenden, der obere Teil des Stapels verwendet wird ([email protected]0).
Fazit
Der Befehl git stash ist eine leistungsstarke Möglichkeit, Ihren Arbeitsbereich zu verwalten. Wenn Sie diesen Befehl beherrschen, können Sie effizienter arbeiten.
Weitere Studie:
- https://git-scm.com/book/de/v1/Git-Tools-Stashing
Verweise:
Stack Overflow: wie man einen Stash-nach-Namen-in-git . benennt und abruft