Ich habe mit der Arbeit an einem neuen Feature begonnen und nach einigem Codieren habe ich beschlossen, dass dieses Feature in einem eigenen Zweig sein sollte.
Wie verschiebe ich die vorhandenen nicht festgeschriebenen Änderungen in einen neuen Zweig und setze meinen aktuellen zurück?
Ich möchte meinen aktuellen Zweig zurücksetzen und gleichzeitig die vorhandene Arbeit an der neuen Funktion beibehalten.
git
git-branch
git-stash
git-reset
Däne O'Connor
quelle
quelle
Antworten:
Verwenden Sie Folgendes:
Dadurch bleibt Ihr aktueller Zweig unverändert, Sie können einen neuen Zweig erstellen und auschecken und alle Ihre Änderungen beibehalten. Anschließend können Sie Änderungen an Dateien vornehmen, mit denen Folgendes festgeschrieben werden soll:
und verpflichten Sie sich zu Ihrer neuen Niederlassung mit:
Die Änderungen im Arbeitsverzeichnis und die im Index vorgenommenen Änderungen gehören noch keinem Zweig an . Dies ändert den Zweig, in dem diese Änderungen enden würden.
Sie müssen nicht zurückgesetzt ursprünglichen Zweig, es bleibt wie es ist. Das letzte Commit
<old-branch>
bleibt unverändert. Deshalb ducheckout -b
und dann begehen.Update 2020 / Git 2.23
Git 2.23 fügt den neuen
switch
Unterbefehl hinzu , um die Verwirrung zu beseitigen, die durch die überlastete Verwendung voncheckout
(Verzweigen von Zweigen, Wiederherstellen von Dateien, Trennen von HEAD usw.) entsteht.Ersetzen Sie ab dieser Version von Git den obigen Befehl durch:
Das Verhalten ist identisch und bleibt unverändert.
quelle
git checkout -b <new branch>
Änderungen, in denen diese Änderungen enden würden.git checkout .
/git reset --hard
wird unrecoverably entferne sieAlternative:
Speichern Sie aktuelle Änderungen in einem temporären Stash:
$ git stash
Erstellen Sie einen neuen Zweig basierend auf diesem Stash und wechseln Sie zum neuen Zweig:
$ git stash branch <new-branch> stash@{0}
Tipp: Verwenden Sie die Tabulatortaste, um die Eingabe des Stash-Namens zu reduzieren.
quelle
git stash apply
.git checkout -b <new branch name>
git add -A
vor dem Verstauen.Wenn Sie während des Codierens Commits in Ihrem Hauptzweig vorgenommen haben, diese Commits jetzt jedoch in einen anderen Zweig verschieben möchten, ist dies ein schneller Weg:
Kopieren Sie Ihren aktuellen Verlauf in einen neuen Zweig und bringen Sie auch nicht festgeschriebene Änderungen mit:
Erzwingen Sie nun, dass der ursprüngliche "unordentliche" Zweig zurückgesetzt wird: (ohne zu ihm zu wechseln)
Zum Beispiel:
oder wenn Sie 4 Commits gemacht haben:
Achtung:
git branch -f master origin/master
wird die Tracking - Informationen zurückgesetzt für diesen Zweig. Wenn Sie Ihrenmaster
Zweigso konfiguriert haben, dass er an einen anderen Ort alsorigin/master
diesen verschoben wird, geht diese Konfiguration verloren.Warnung: Es besteht auch die Gefahr, dass Sie nach der Verzweigung, die hier beschrieben wird , die Basis neu festlegen. Die einzige Möglichkeit, dies zu vermeiden, besteht darin, mit Cherry-Pick einen neuen Verlauf zu erstellen. Dieser Link beschreibt die sicherste narrensichere Methode . Wenn Sie nicht festgeschriebene Änderungen vorgenommen haben, möchten Sie dies möglicherweise
git stash
am Anfang undgit stash pop
am Endetun.quelle
Das häufigste Szenario ist das folgende: Ich habe vergessen, den neuen Zweig für das neue Feature zu erstellen, und habe die gesamte Arbeit im alten Feature-Zweig ausgeführt. Ich habe alle "alten" Arbeiten an den Master-Zweig übergeben, und ich möchte, dass mein neuer Zweig aus dem "Master" wächst. Ich habe kein einziges Commit für meine neue Arbeit gemacht. Hier ist die Zweigstruktur: "master" -> "Old_feature"
quelle
Wenn Sie es festschreiben, können Sie auch die einzelne Festschreibungs-ID auswählen. Ich mache das oft, wenn ich anfange, im Master zu arbeiten, und dann eine lokale Niederlassung erstellen möchte, bevor ich zu meinem Ursprung aufsteige.
Es gibt eine Menge, die Sie mit Cherry-Pick tun können, wie hier beschrieben , aber dies könnte ein Anwendungsfall für Sie sein.
quelle
Dies kann für alle hilfreich sein, die Tools für GIT verwenden
Befehl
Zweig wechseln - Ihre Änderungen werden in den neuen Zweig verschoben. Dann können Sie Änderungen festschreiben.
TortoiseGIT
Klicken Sie mit der rechten Maustaste auf Ihr Repository und verwenden Sie TortoiseGit-> Switch / Checkout
SourceTree
Verwenden Sie die Schaltfläche "Kasse", um den Zweig zu wechseln. Nach dem Klicken auf einen Zweig wird oben die Schaltfläche "Kasse" angezeigt. Änderungen aus dem aktuellen Zweig werden automatisch übernommen. Dann können Sie sie festschreiben.
quelle
Ich habe @Robin Antwort verwendet und alles aufgelistet , was ich getan habe.
! Wenn das Repo mehr als einen Vorrat hat, sehen Sie, welcher auf den neuen Zweig angewendet werden soll:
und inspizieren Sie den einzelnen Vorrat durch,
Oder überprüfen Sie alle Verstecke auf einmal:
quelle
Es gibt tatsächlich eine sehr einfache Möglichkeit, dies mit GitHub Desktop zu tun, da ich nicht glaube, dass dies zuvor eine Funktion war.
Sie müssen lediglich in GitHub Desktop zum neuen Zweig wechseln und werden aufgefordert, Ihre Änderungen im aktuellen Zweig (der gespeichert wird) zu belassen oder Ihre Änderungen in den neuen Zweig mitzunehmen. Wählen Sie einfach die zweite Option, um die Änderungen in den neuen Zweig zu übernehmen. Sie können dann wie gewohnt festschreiben.
quelle