W3docs

git switch

Lerne den Befehl git switch — den modernen Weg, Branches zu wechseln und zu erstellen. Unterschiede zu git checkout mit Beispielen.

Definition

Der Befehl git switch wechselt den Branch, auf dem du arbeitest. Eingeführt in Git 2.23, wurde er aus dem überlasteten Befehl git checkout herausgelöst, um eine Aufgabe klar zu erfüllen: HEAD auf einen anderen Branch zu verschieben und das Arbeitsverzeichnis entsprechend zu aktualisieren. Alles, was mit dem Wiederherstellen von Dateien zu tun hat, liegt jetzt bei git restore, sodass switch ausschließlich auf Branches fokussiert bleibt.

Diese Seite behandelt das Wechseln zu einem vorhandenen Branch, das gleichzeitige Erstellen eines Branches, das Auschecken eines Remote-Branches, das Mitführen nicht committeter Änderungen, das Zurückspringen mit - sowie die Unterschiede zwischen git switch und git checkout.

git switch verschiebt HEAD von einem Branch zu einem anderen

Warum git switch existiert

Jahrelang erledigte git checkout zwei nicht verwandte Aufgaben: das Wechseln von Branches und das Wiederherstellen von Dateien im Arbeitsverzeichnis. Diese Überlastung machte es leicht, versehentlich Arbeit zu verlieren — git checkout <file> verwarf Änderungen stillschweigend, während git checkout <branch> dich an einen neuen Ort brachte. Git 2.23 hat die Verantwortlichkeiten aufgeteilt, sodass jeder Befehl vorhersehbar ist: git switch wechselt zwischen Branches, und git restore stellt Dateien wieder her. Beide wurden genau aus diesem Grund zusammen eingeführt. git checkout ist nicht veraltet und funktioniert weiterhin, aber für die tägliche Branch-Arbeit ist git switch klarer und sicherer.

Zu einem vorhandenen Branch wechseln

Um zu einem bereits existierenden Branch zu wechseln, gib dessen Namen an:

git switch feature

HEAD zeigt nun auf feature, und dein Arbeitsverzeichnis spiegelt den letzten Commit dieses Branches wider. Falls du nicht committete Änderungen hast, die überschrieben würden, stoppt Git und warnt dich, anstatt die Arbeit zu verwerfen.

Erstellen und Wechseln in einem Schritt

Verwende das Flag -c (create), um einen neuen Branch zu erstellen und sofort dorthin zu wechseln:

git switch -c new-feature

Dies ist das moderne Äquivalent zu git checkout -b new-feature. Du kannst den neuen Branch auch auf einem bestimmten Ausgangspunkt basieren lassen:

git switch -c hotfix main

Hier ist main der Startpunkt: Der neue Branch hotfix beginnt am gleichen Commit wie main, aber beide entwickeln sich danach unabhängig voneinander. Der Startpunkt kann ein Branch-Name, ein Tag oder ein Commit-Hash sein.

Einen Remote-Branch auschecken

Ein sehr häufiger Fall ist, mit einem Branch zu beginnen, der auf dem Remote existiert, aber noch nicht lokal — zum Beispiel nachdem ein Teamkollege einen feature-Branch gepusht hat. Wenn der Name eindeutig ist, wechsle einfach dorthin:

git fetch
git switch feature

Git erkennt, dass kein lokaler feature-Branch vorhanden ist, findet ein einzelnes origin/feature und erstellt automatisch einen lokalen feature-Branch, der es trackt. Diese Komfortfunktion ist das --guess-Verhalten, das standardmäßig aktiviert ist. Um explizit zu sein, oder wenn mehrere Remotes einen Branch mit demselben Namen haben, benenne den Tracking-Branch selbst:

git switch -c feature --track origin/feature
Info

Führe zuerst git fetch aus. git switch kann nur Remote-Branches finden, die dein lokales Repository bereits kennt; Fetching aktualisiert diese Liste.

Nicht committete Änderungen auf einen anderen Branch mitführen

Standardmäßig ist das Wechseln mit nicht committeten Änderungen in Ordnung, solange diese Änderungen nicht mit dem Ziel-Branch in Konflikt stehen — Git behält sie in deinem Arbeitsverzeichnis. Wenn sie überschrieben würden, verweigert Git den Wechsel und informiert dich darüber. Um widersprüchliche lokale Änderungen absichtlich mitzunehmen und in den neuen Branch einzufließen zu lassen, füge -m (--merge) hinzu:

git switch -m other-branch

Wenn du die Änderungen lieber sauber beiseitelegen und später erneut anwenden möchtest, verwende stattdessen git stash, anstatt den Wechsel zu erzwingen.

Häufige Optionen

BefehlBeschreibung
git switch <branch>Wechselt zu einem vorhandenen Branch.
git switch -c <branch>Erstellt einen neuen Branch und wechselt zu ihm.
git switch -c <branch> <start-point>Erstellt einen Branch von einem bestimmten Commit oder Branch und wechselt zu ihm.
git switch -Wechselt zurück zum zuvor ausgecheckten Branch.
git switch -c <branch> --track <remote>/<branch>Erstellt einen lokalen Tracking-Branch von einem Remote-Branch.
git switch --detach <commit>Checkt einen Commit direkt im detached HEAD-Zustand aus.
git switch -m <branch>Wechselt und führt dabei widersprüchliche lokale Änderungen in den Ziel-Branch ein.
git switch -C <branch>Erstellt den Branch oder setzt ihn zurück, falls er bereits existiert, und wechselt dann.
git switch --orphan <branch>Startet einen neuen Branch ohne Historie und mit leerem Arbeitsverzeichnis.

Zurückgehen, wo du warst

Ein einzelner Bindestrich bringt dich zurück zu dem Branch, auf dem du vorher warst:

git switch -

Dies ist praktisch, wenn du zwischen zwei Branches wechselst und ihre Namen nicht wiederholt eintippen möchtest.

Einen Commit ohne Branch inspizieren

Um einen alten Commit anzusehen, ohne einen Branch zu verschieben, verwende --detach. Damit befindest du dich im Zustand detached HEADHEAD zeigt direkt auf einen Commit statt auf einen Branch-Namen:

git switch --detach 8f4c2a1

Du kannst von hier aus browsen und sogar bauen, aber neue Commits sind keinem Branch zugeordnet und können verloren gehen, sobald du wegwechselst. Wenn du sie behalten möchtest, erstelle zuerst einen Branch mit git switch -c <name>.

git switch vs. git checkout

Beide Befehle können Branches wechseln — warum also switch bevorzugen? Weil er deine Dateien nicht versehentlich berühren kann. git checkout akzeptiert sowohl Branch-Namen als auch Dateipfade, was bedeutet, dass ein Tippfehler deine Arbeit stillschweigend überschreiben kann. git switch befasst sich ausschließlich mit Branches; wenn du Änderungen an einer Datei verwerfen möchtest, greifst du zum klar benannten git restore.

# Old, overloaded way
git checkout main
git checkout -b feature

# Modern, explicit way
git switch main
git switch -c feature

Beachte, dass git checkout etwas kann, was git switch nicht kann: mit Dateien arbeiten (git checkout -- file.txt). Das ist beabsichtigt: Dateioperationen gehören jetzt zu git restore.

Verwandte Befehle

  • git checkout — der ältere, vielseitige Befehl, den switch und restore ersetzt haben.
  • git restore — Änderungen an Dateien im Arbeitsverzeichnis verwerfen oder wiederherstellen.
  • git branch — Branches auflisten, erstellen, umbenennen und löschen.
  • git merge — Arbeit von einem anderen Branch zusammenführen, nachdem du zurückgewechselt bist.
  • git stash — nicht committete Änderungen vor dem Wechseln zwischenspeichern.

Übung

Übung
Welche Aussagen über 'git switch' sind korrekt?
Welche Aussagen über 'git switch' sind korrekt?
Was this page helpful?