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 develop
noch ist das Verfahren trivial:
$ git checkout -b develop
Dadurch wird ein neuer develop
Zweig 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 save
or git stash push
, 1 oder einfach nur git stash
die 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 drop
das 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 apply
Schritt 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 drop
nur 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 save
in git stash save
ist das alte Verb zum Erstellen eines neuen Stashs. In Git Version 2.13 wurde das neue Verb eingeführt, um die Konsistenz pop
zu 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 stash
git-scm.com/book/en/Git-Tools-Stashing