Das passiert mir oft: Ich schreibe Code, checke meine Änderungen ein und stelle dann fest, dass ich nicht in der richtigen Verzweigung bin, um diese Änderungen einzuchecken. Ich kann jedoch nicht zu einem anderen Zweig wechseln, ohne dass meine Änderungen rückgängig gemacht werden. Gibt es eine Möglichkeit, Änderungen in einen anderen Zweig zu verschieben, um dort eingecheckt zu werden?
421
C:\kf [develop +0 ~4 -0]> git checkout feature/customers<br/> error: Your local changes to the following files would be overwritten by checkout:<br/> AspWebApp.vNext/global.asa<br/> RestApi/Web.config<br/> Please, commit your changes or stash them before you can switch branches.<br/> Aborting
Wenn Sie Ihre Änderungen noch nicht festgeschrieben haben, wechseln Sie einfach
git checkout
zum neuen Zweig und übernehmen Sie sie dann normal. Änderungen an Dateien werden erst an einen bestimmten Zweig gebunden, wenn Sie sie festschreiben.Wenn Sie haben bereits Ihre Änderungen festgeschrieben:
git log
und erinnere mich an den SHA von der Commit Sie verschieben möchten.git cherry-pick SHA
den SHA von oben ein.git reset HEAD~1
diese Option, um vor dem Festschreiben eines falschen Zweigs einen Reset durchzuführen.cherry-pick
Nimmt ein bestimmtes Commit und wendet es auf den aktuell ausgecheckten Kopf an, sodass Sie das Commit in einen neuen Zweig kopieren können.quelle
git reset HEAD~N --soft
und danngit checkout -b
den gesamten jetzt nicht festgeschriebenen Code in einen neuen Zweig zu verschieben.Leider passiert mir das auch ziemlich regelmäßig und ich benutze,
git stash
wenn ich meinen Fehler vorher erkannt habegit commit
undgit cherry-pick
anderweitig benutze , werden beide Befehle in anderen Antworten ziemlich gut erklärtIch möchte eine Klarstellung hinzufügen für
git checkout targetBranch
: Dieser Befehl behält Ihr Arbeitsverzeichnis und Ihren bereitgestellten Snapshot nur bei, wenn targetBranch denselben Verlauf wie Ihr aktueller Zweig hatDie Anweisung von @ Amber ist nicht falsch. Wenn Sie zu einer neuen Branche wechseln ,
git checkout -b newBranch
wird ein neuer Zeiger erstellt, der auf genau dasselbe Commit wie Ihr aktueller Zweig verweist.Wenn Sie zufällig einen anderen Zweig haben, der den Verlauf mit Ihrem aktuellen Zweig teilt (beide zeigen auf dasselbe Commit), können Sie Ihre Änderungen "verschieben"
git checkout targetBranch
Normalerweise bedeuten unterschiedliche Zweige jedoch einen unterschiedlichen Verlauf, und mit Git können Sie nicht zwischen diesen Zweigen mit einem schmutzigen Arbeitsverzeichnis oder Staging-Bereich wechseln. In diesem Fall können Sie entweder
git checkout -f targetBranch
Änderungen vornehmen (bereinigen und wegwerfen) odergit stage
+git checkout targetBranch
( Änderungen bereinigen und speichern ). Durch einfaches Ausführengit checkout targetBranch
wird ein Fehler ausgegeben:quelle
Ein Soft-Git-Reset bringt festgeschriebene Änderungen wieder in Ihren Index. Überprüfen Sie als Nächstes den Zweig, für den Sie sich verpflichten wollten. Dann git commit mit einer neuen Commit-Nachricht.
git reset --soft <commit>
git checkout <branch>
git commit -m "Commit message goes here"
Aus Git-Dokumenten :
quelle