Es gibt verschiedene Möglichkeiten, je nachdem, wie weit Sie entfernt sind und auf welchen Zweigen Sie sie haben möchten.
Nehmen wir einen klassischen Fehler:
$ git checkout master
... pause for coffee, etc ...
... return, edit a bunch of stuff, then: oops, wanted to be on develop
Nun möchten Sie, dass diese Änderungen, zu denen Sie sich noch nicht verpflichtet haben master, wirksam werden develop.
Wenn Sie nicht über eine developnoch ist das Verfahren trivial:
$ git checkout -b develop
Dadurch wird ein neuer developZweig erstellt, der von jedem Ort aus beginnt. Jetzt können Sie sich verpflichten und das neue Zeug ist fertig develop.
Du hast eine develop. Sehen Sie, ob Sie mit Git wechseln können, ohne etwas zu tun:
$ git checkout develop
Dies wird entweder erfolgreich sein oder sich beschweren. Wenn es gelingt, großartig! Einfach begehen. Wenn nicht ( error: Your local changes to the following files would be overwritten ...), haben Sie noch viele Optionen.
Das einfachste ist wahrscheinlich git stash(wie alle anderen Antwortenden, die mich zum Klicken geschlagen haben, postsagten). Run git stash saveor git stash push, 1 oder einfach nur git stashdie Abkürzung für save/ push:
$ git stash
Dadurch wird Ihr Code mithilfe einer seltsamen Methode ohne Verzweigung festgeschrieben (ja, es werden tatsächlich einige Festschreibungen vorgenommen). Die Commits, die es macht, befinden sich nicht in einem Zweig, sondern werden jetzt sicher im Repository gespeichert, sodass Sie jetzt die Zweige wechseln und dann den Stash "anwenden" können:
$ git checkout develop
Switched to branch 'develop'
$ git stash apply
Wenn alles gut geht und Sie die Ergebnisse mögen, sollten Sie git stash dropdas Versteck. Dadurch wird der Verweis auf die seltsamen Commits ohne Verzweigung gelöscht. (Sie befinden sich noch im Repository und können manchmal im Notfall abgerufen werden. In den meisten Fällen sollten Sie sie jedoch als zu diesem Zeitpunkt verschwunden betrachten.)
Der applySchritt führt eine Zusammenführung der verborgenen Änderungen durch, wobei die leistungsstarke zugrunde liegende Zusammenführungsmaschinerie von Git verwendet wird. Dies gilt auch für die Zusammenführung von Zweigen. Dies bedeutet, dass Sie "Zusammenführungskonflikte" erhalten können, wenn sich der Zweig, an dem Sie versehentlich gearbeitet haben, ausreichend von dem Zweig unterscheidet, an dem Sie arbeiten wollten. Es ist daher eine gute Idee, die Ergebnisse sorgfältig zu überprüfen, bevor Sie davon ausgehen, dass der Stash sauber angewendet wurde, auch wenn Git selbst keine Zusammenführungskonflikte festgestellt hat.
Viele Leute benutzen git stash pop, was für kurz ist git stash apply && git stash drop. Soweit es geht, ist das in Ordnung, aber es bedeutet, dass Sie den Vorrat nicht einfach zurückbekommen können, wenn die Anwendung zu einem Durcheinander führt und Sie entscheiden, dass Sie diesen Weg nicht beschreiten möchten. Aus diesem Grund empfehle ich apply, die Ergebnisse dropnur dann zu überprüfen, wenn sie zufrieden sind. (Dies führt natürlich einen weiteren Punkt ein, an dem Sie eine weitere Kaffeepause einlegen und vergessen können, was Sie getan haben, zurückkommen und das Falsche tun können. Es ist also keine perfekte Heilung.)
1 Das savein git stash saveist das alte Verb zum Erstellen eines neuen Stashs. In Git Version 2.13 wurde das neue Verb eingeführt, um die Konsistenz popzu verbessern und dem Erstellungsbefehl weitere Optionen hinzuzufügen. Git Version 2.16 hat das alte Verb offiziell veraltet (obwohl es immer noch in Git 2.23 funktioniert, der neuesten Version zum Zeitpunkt der Bearbeitung).
git stashgit-scm.com/book/en/Git-Tools-Stashing