Okay, sagen wir eines Tages, wir machen eine Reihe von Änderungen und wenn wir sie festschreiben, bemerken wir, dass wir an der falschen Niederlassung gearbeitet haben.
Wie können wir git Schalterzweigen zwingen , ohne lokale Änderungen zu verwerfen .
Ich werde das wahrscheinlich naiv angehen, während ich auf eine Antwort warte, aber ich würde gerne wissen, ob es ein korrektes Verfahren gibt, da ich lügen würde, wenn ich sagen würde, dass mir das noch nie passiert ist ...
- Backup geändert Repo
git reset --hard
git checkout right-branch
- Änderungen wiederherstellen
git commit -m "changes"
git
git-branch
Megawac
quelle
quelle
git stash
git-scm.com/book/en/Git-Tools-StashingAntworten:
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:
Nun möchten Sie, dass diese Änderungen, zu denen Sie sich noch nicht verpflichtet haben
master
, wirksam werdendevelop
.Wenn Sie nicht über eine
develop
noch ist das Verfahren trivial:Dadurch wird ein neuer
develop
Zweig erstellt, der von jedem Ort aus beginnt. Jetzt können Sie sich verpflichten und das neue Zeug ist fertigdevelop
.Du hast eine
develop
. Sehen Sie, ob Sie mit Git wechseln können, ohne etwas zu tun: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). Rungit stash save
orgit stash push
, 1 oder einfach nurgit stash
die Abkürzung fürsave
/push
: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:
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 istgit 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 ichapply
, die Ergebnissedrop
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
ingit stash save
ist das alte Verb zum Erstellen eines neuen Stashs. In Git Version 2.13 wurde das neue Verb eingeführt, um die Konsistenzpop
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).quelle
git stash
tun, damit die Festschreibungen - denngit stash
Sie erhalten in einer ungewöhnlichen Anordnung zwei Festschreibungen pro Stash-Eintrag - in keinem Zweig sind. Abgesehen von sehr kurzfristigen Sonderfällen bevorzuge ich jedoch im Allgemeinen ein normales Commit. Sie könnengit reset --soft
odergit reset --mixed
später oder verwenden,git commit --amend
um es beiseite zu schieben, wenn Sie wieder an diesem Zweig arbeiten. (In modernen Git können Sie auch verwendengit worktree add
, was eine noch bessere Lösung sein kann.)Verwenden Sie Git Stash
Es überträgt Änderungen auf einen Stapel. Wenn Sie sie zurückziehen möchten, verwenden Sie
Sie können sogar einzelne Gegenstände herausziehen. Um das Versteck komplett wegzublasen:
quelle
git stash drop
;git stash clear
löscht den gesamten Stash-Stack, einschließlich möglicherweise nicht verwandter Stashes für diesen Befehlssatz.git stash
um Ihre nicht festgeschriebenen Änderungen zu speicherngit stash list
um Ihre gespeicherten nicht festgeschriebenen Vorräte aufzulistengit stash apply stash@{x}
Dabei kann x 0,1,2 sein. Keine Anzahl von Verstecken, die Sie erstellt habenquelle
Du kannst entweder :
Verwenden Sie
git stash
diese Option, um Ihre Änderungen zu speichern, oder,Erstellen Sie einen weiteren Zweig, übernehmen Sie Ihre Änderungen dort und führen Sie diesen Zweig in Ihrem Arbeitsverzeichnis zusammen
quelle