Verschieben Sie vorhandene, nicht gebundene Arbeit an eine neue Niederlassung in Git
-
21-09-2019 - |
Frage
begann ich einige Arbeiten an einem neuen Feature und nach der Codierung für ein bisschen, habe ich beschlossen, diese Funktion auf einer eigenen Niederlassung sein sollte.
Wie bewege ich die bestehenden unbestätigten Änderungen auf einen neuen Zweig und setze meine aktuellen?
Ich mag meinen aktuellen Zweig zurückgesetzt, während auf das neue Feature bestehende Arbeit zu erhalten.
Lösung
Verwenden Sie die folgenden Schritte aus:
git checkout -b <new-branch>
Dies wird Ihren aktuellen Zweig lassen wie es ist, erstellen und eine Niederlassung Kasse und alle Änderungen hält. Sie können dann ein Commit machen mit:
git add <files>
und verpflichten sich zu Ihrem neuen Zweig mit:
git commit -m "<Brief description of this commit>"
Die Änderungen im Arbeitsverzeichnis und Änderungen im Index aufgeführt nicht gehört in jede Filiale noch. Dies ändert, wenn diese Änderungen würden in beenden.
Sie können Zurücksetzen Ihren ursprünglichen Zweiges, bleibt es wie es ist. Die letzte commit auf <old-branch>
wird immer noch die gleichen sein. Daher checkout -b
Sie und dann begehen.
Andere Tipps
Alternativ:
-
Speicher aktuelle Änderungen in einem temporären Stash:
$ git stash
-
Erstellen Sie einen neuen Zweig auf der Basis dieser Stash und Umstellung auf die neue Filiale:
$ git stash branch <new-branch> stash@{0}
. Tipp: Verwendung Tabulatortaste zur Verringerung des Stash Namen eingeben
Wenn Sie Commits gemacht haben auf dem Hauptzweig, während Sie codiert, aber Sie wollen jetzt diese Festschreibungen zu einem anderen Zweig verschieben:
-
Kopieren Sie die aktuelle Geschichte auf einen neuen Zweig, entlang irgendwelchen unbestätigten Änderungen bringen auch:
git checkout -b <new-feature-branch>
-
zwingt nun den original "chaotisch" Zweig zur Zurückdrängung: (ohne es zu schaltend)
git branch -f <previous-branch> <earlier-commit-id>
Zum Beispiel:
git branch -f master origin/master
oder wenn Sie 4 Commits gemacht haben:
git branch -f master HEAD~4
Achtung: Es scheint, dass git branch -f master origin/master
wird die Tracking-Informationen zurückgesetzt für diesen Zweig. Also, wenn Sie Ihren master
Zweig zu Push-to irgendwo anders als origin/master
so konfiguriert haben, dann, dass die Konfiguration verloren.
Eine Alternative ist die Verwendung href="https://stackoverflow.com/a/1628584/99777">. Aber diese Anweisungen werden alle nicht bestätigten Änderungen verwerfen Sie haben. Wenn Sie diejenigen behalten möchten, verstauen sie zuerst und unstash sie am Ende.
Das gängige Szenario ist folgende: Ich habe vergessen, den neuen Zweig für die neue Funktion zu erstellen, und war die ganze Arbeit in dem alten Funktionszweig zu tun. Ich habe alle die „alte“ Arbeit an den Master Zweig verpflichtet, und ich möchte meinen neuen Zweig vom „Master“ wachsen. Ich habe nicht aus einem einzigen meiner neuen Arbeit zu begehen. Hier ist die Verzweigungsstruktur: "Master" -> "Old_feature"
git stash
git checkout master
git checkout -b "New_branch"
git stash apply
Wenn Sie es begehen, können Sie auch herauspicken die einzelne ID begehen. Ich tue dies oft, wenn ich Arbeit in Master beginnen, und will dann einen lokalen Zweig erstellen, bevor ich zu meinem Ursprung drücken /.
git cherry-pick <commitID>
Es gibt viel Sie mit cherry-pick tun können, wie beschrieben href="https://git-scm.com/docs/git-cherry-pick">, aber dies könnte sein, ein anwendungs~~POS=TRUNC für Sie.
Ich benutzte @Robin Antwort & Auflistung aller, dass ich es tat,
git status <-- review/list uncommitted changes
git stash <-- stash uncommitted changes
git stash branch <new-branch> stash@{1} <-- create a branch from stash
git add . <-- add local changes
git status <-- review the status; ready to commit
git commit -m "local changes ..." <-- commit the changes
git branch --list <-- see list of branches incl the one created above
git status <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch> <-- switch back
Wenn der Repo mehr als ein Versteck hat, sehen, die man auf den neuen Zweig anwenden:
git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ...
und überprüfen Sie die einzelnen Stash durch,
git stash show stash@{1}
oder kontrolliert alle stashes auf einmal:
git stash list -p
Es ist eigentlich eine wirklich einfache Möglichkeit, dies jetzt mit GitHub-Desktop zu tun, dass ich nicht glaube, ein Merkmal vorher war.
Alles, was Sie tun müssen, ist Umstellung auf die neue Niederlassung in GitHub Desktop und es wird Sie auffordern, Ihre Änderungen auf dem aktuellen Zweig zu verlassen (die gebunkert wird), oder Ihre Änderungen mit Ihnen den neuen Zweig zu bringen. Wählen Sie einfach die zweite Option, die Änderungen an den neuen Zweig zu bringen. Sie können dann wie gewohnt begehen.
Dies kann für alle mit Werkzeugen für GIT hilfreich sein
Befehl
Schalter Zweig - es wird Ihre Änderungen an neuen Zweig bewegen. Dann können Sie Änderungen.
$ git checkout -b <new-branch>
TortoiseGit
Rechtsklick auf das Repository und dann TortoiseGit- verwenden> Schalter / Kasse
SourceTree
Verwenden Sie die „Kasse“, um Schalter Zweig. Sie werden nach einem Klick auf einen Zweig der „Kasse“ Button oben sehen. Änderungen der aktuellen Zweig wird automatisch angewendet werden. Dann können Sie sie begehen.