Ich bin immer auf dem falschen Branch. Entweder arbeite ich auf master oder main an etwas, das auf einem fix- oder feature-Branch sein sollte. Oder ich bin auf dem letzten Branch, an dem ich gearbeitet habe, und hätte einen neuen Branch erstellen sollen. Nun ja. Es ist nie so schlimm. Im Grunde bedeutet es, ungespeicherte Änderungen auf einen neuen Branch zu verschieben. Das ist es, was ich normalerweise tue:
- Alle geänderten, aber ungespeicherten Dateien stashen
- Zurück zu master wechseln
- Master pullen, um sicherzustellen, dass er auf dem neuesten Stand ist
- Einen neuen Branch von master erstellen
- Zum neuen Branch wechseln
- Diese geänderten Dateien unstashen
Möchten Sie weitere Git-Tipps? Unsere „Advanced Git“-Reihe hat jede Menge davon.
Ungespeicherte Änderungen mit der Git CLI auf einen neuen Branch verschieben, so sieht das aus
So verschiebe ich im Allgemeinen ungespeicherte Änderungen in Git auf einen neuen Branch
git status
git stash --include-untracked
git checkout master
git pull
git branch content/sharis
git checkout content/sharis
git stash pop
Ungespeicherte Änderungen in Git Tower auf einen neuen Branch verschieben, so sieht das aus
Ich denke, man könnte theoretisch jeden dieser Schritte einzeln in Git Tower durchführen, um ungespeicherte Änderungen auf einen neuen Branch zu verschieben, aber der Trick ist, dass man den Branch erstellen und per Doppelklick dorthin wechseln kann.
Entschuldigung, ich mache das nur mit Git Tower, aber es gibt viele andere Git-GUIs, die wahrscheinlich ebenfalls clevere Wege haben, dies zu tun.
Aber es gibt einen neuen, schicken Weg!
Diese Methode, ungespeicherte Änderungen auf einen neuen Branch zu verschieben, ist zumindest für mich neu und war auch für Wes neu, als er das getwittert hat.
Cool. Das ist
git switch -c new-branch
git switchist im Wesentlichen eine sauberere Version von Branch-bezogenen Befehlen ingit checkout.Alles, was
git switch -c neuer-branchtut, ist, einen neuen Branch zu erstellen und dorthin zu wechseln. Genau wiegit checkout -b neuer-branch. Beide erlauben unbestätigte Änderungen.Die andere Funktionalität von
git checkoutsollte jetzt mitgit restoregehandhabt werden.Eine Sache, die man auch tun kann, wenn man sich auf einem Feature-Branch befindet, aber von master abzweigen möchte, ist
git switch -c neuer-branch master. Das ist dasselbe wiegit switch mastergefolgt vongit switch -c neuer-branchund funktioniert genauso, wenn mangit switch -cwieder durchgit checkout -bersetzt (z. B. für alte Git-Versionen).Das Wechseln von Branches schlägt fehl (nur) dann, wenn man geänderte Dateien hat, die sich zwischen dem Feature-Branch und master unterscheiden. Als Workaround kann man das Flag
-m/--mergehinzufügen, um Git zu bitten, beide Änderungen zusammenzuführen.In jedem Fall ist man möglicherweise nicht auf dem neuesten Stand mit dem Upstream-Master. Man muss also immer noch
git pullmachen. Das wird wiederum problematisch, wenn man unbestätigte Änderungen hat. In diesem Fall gibt es das Flag--autostash. Ich bin mir nicht sicher, wie sehr das die Dinge vereinfacht ;-)Alles in allem würde ich sagen, dass die explizite Verwendung von stash immer noch ein guter Ansatz ist, da man einfache Git-Befehle verwendet und die volle Kontrolle darüber hat, was passiert. Alternativ wäre Folgendes gleichwertig, wenn man stashing wirklich vermeiden möchte.
Wenn man
mastergleichzeitig auch auforigin/masteraktualisieren möchte, kann man Folgendes tun:Warum benutzt du nicht einfach
Das überträgt automatisch alle ungespeicherten Änderungen auf den neu erstellten Branch.
git switchscheint ähnliches zu tun, aber mit bereits committeten Dingen. Das konnte ich gestern gut gebrauchen, werde es bald ausprobieren.Brillant! Ich habe den Tweet von @wes darüber gesehen, kurz nachdem ich deinen gesehen habe, und dachte #greatMinds!
Ich kann es kaum erwarten, das zu benutzen!
#vielenDank