Kennen Sie diese Situation? Sie entwickeln gerade ein komplexes neues Feature, der Code ist halb fertig, und plötzlich kommt ein dringender Bug herein, der sofort behoben werden muss.
Um den Branch zu wechseln, müssen Sie widerwillig git stash ausführen, um Ihren unfertigen Code zu verstecken. Nach der Bugbehebung kehren Sie zurück und führen vorsichtig git stash pop aus, wobei Sie manchmal mit dem Albtraum von Code-Konflikten konfrontiert werden.
Tatsächlich bietet Git schon lange ein äußerst mächtiges Werkzeug zur Lösung dieses Problems: Git Worktree.
Verabschieden Sie sich von chaotischen Branch-Wechseln und Stashes und starten Sie Multi-Thread-Entwicklung mit Worktree
Dieser Artikel führt Sie durch die Kernfunktionsweise und den praktischen Einsatz im Entwickleralltag.
Was ist der Unterschied zwischen Git Worktree und Git Branch?
Um Git Worktree zu verstehen, klären wir zunächst den Unterschied zu einem Git Branch.
Wir können uns die Versionskontrolle wie das Lesen eines Buches vorstellen:
Commitist die Auflage / Version des BuchesBranchist das Lesezeichen auf einer bestimmten SeiteWorktreeist der Schreibtisch, auf dem Sie das Buch aufschlagen
Beim traditionellen Ansatz haben wir nur einen einzigen Schreibtisch. Jedes Mal, wenn wir das Lesezeichen wechseln möchten, müssen wir alle bearbeiteten Papiere aufräumen oder in eine Schublade legen (das entspricht git stash).
Git Worktree hingegen ermöglicht es Ihnen, mehrere unabhängige Schreibtische gleichzeitig zu besitzen.
| Vergleichspunkt | Git Branch | Git Worktree |
|---|---|---|
| Workspace-Konzept | Teilt ein altes physisches Arbeitsverzeichnis | Besitzt mehrere unabhängige physische Arbeitsverzeichnisse |
| Wechselkosten | Erfordert Commit, Stash oder Zwischenspeichern | Kein Stash erforderlich; einfach das Verzeichnis wechseln |
| Isolierung & Sicherheit | Uncommitted Dateien können Konflikte oder Reste verursachen | Vollständig isoliert; Änderungen beeinflussen sich nicht |
| Historie | Teilt Git Commit-Historie und Branches | Teilt Git Commit-Historie und Branches |
Aktueller Branch, Staging-Bereich und uncommitted Änderungen jedes Worktrees sind völlig unabhängig, aber sie teilen die gesamte Commit-Historie und Branch-Einträge.
Branch ist das Versions-Lesezeichen, während Worktree der physische Schreibtisch ist
Wenn Sie also die Aufgabe wechseln müssen, öffnen Sie einfach einen anderen Ordner, ohne Ihren aktuellen Entwicklungsstand verändern zu müssen.
Wie startet man mit Git Worktree?
Bei der Einführung von Git Worktree in realen Projekten sorgt eine durchdachte Verzeichnisplanung für reibungslosere Abläufe.
Es wird empfohlen, das ursprungs geklonte git clone Projektverzeichnis als sauberes main-Hauptquartier zu behalten und neu erstellte Worktree-Verzeichnisse außerhalb des Hauptprojekts zu platzieren (z. B. ../my-app-worktrees), um rekursive Scan-Fehler von Entwickler-Tools zu vermeiden.
Der typische Befehlsablauf sieht wie folgt aus:
| Ablauf | Befehl |
|---|---|
| 1. Neuen Worktree erstellen und gleichzeitig neuen Branch anlegen | git worktree add ../my-app-worktrees/feature-login -b feature-login |
| 2. Liste aller aktiven Worktrees anzeigen | git worktree list |
Git Worktree eignet sich hervorragend zur Verwaltung von Entwicklungsaufgaben für einen AI Agent.
Sie können dem AI Agent ein eigenes Worktree-Verzeichnis zuweisen, in dem er nach Belieben Code ändern und testen kann, während menschliche Entwickler in einem anderen Worktree Code-Reviews und Tests durchführen.
Geben Sie dem AI Agent einen eigenen Worktree, damit KI-Entwicklung und menschliches Review parallel ablaufen können
Beide arbeiten in ihren jeweiligen physischen Verzeichnissen – sicher und übersichtlich.
Wie mergt und bereinigt man nach Abschluss der Entwicklung sicher?
Wie führt man die Ergebnisse nach Abschluss der Arbeiten in einem unabhängigen Worktree zusammen und bereinigt alles?
Wichtiges Konzept: Das Worktree-Verzeichnis selbst muss nicht gemergt werden, was tatsächlich gemergt werden muss, ist der Branch.
Sie müssen lediglich zum Schreibtisch-Verzeichnis von main zurückkehren und git merge für den entsprechenden Feature-Branch ausführen.
Befolgen Sie für die Bereinigung den standardmäßigen Zwei-Schritt-Prozess:
| Schritt | Befehl |
|---|---|
| 1. Physisches Worktree-Verzeichnis entfernen | git worktree remove ../my-app-worktrees/feature-login |
| 2. Abgeschlossenen Feature-Branch löschen | git branch -d feature-login |
Zuerst das Worktree-Verzeichnis entfernen, dann den Branch löschen
Nutzen Sie für das Aufräumen stets den Befehl git worktree remove und löschen Sie den Ordner keinesfalls manuell über den Datei-Explorer.
Welche häufigen Fallstricke gibt es bei Git Worktree?
Obwohl Git Worktree sehr praktisch ist, gibt es einige Stolperfallen, die Sie beachten sollten.
Fallstrick 1: Nicht committete Änderungen gehen verloren
Obwohl das Entfernen eines Worktrees den Branch selbst nicht löscht, werden noch uncommitted Änderungen im Verzeichnis durch ein erzwungenes Löschen des Worktrees unwiederbringlich gelöscht.
Fallstrick 2: Branch-Belegungskonflikte
Der Schutzmechanismus von Git erlaubt es nicht, denselben Branch gleichzeitig in zwei verschiedenen Worktrees auszuchecken. Wenn Sie versuchen, in einem zweiten Worktree zu einem bereits belegten Branch zu wechseln, blockiert Git dies und gibt eine Fehlermeldung aus.
Erzwungenes Löschen eines Worktrees führt zum Verlust noch nicht committeter Änderungen
Wenn Sie diese Eigenschaften und Prinzipien beherrschen, vermeiden Sie diese Fehler.
Fazit
Mit Git Worktree können wir uns komplett von chaotischen Branch-Wechseln und git stash-Abläufen verabschieden und echte Multi-Thread-Entwicklung erreichen.
Wenn Sie das nächste Mal einen dringenden Bug beheben, mehrere Features gleichzeitig entwickeln oder Aufgaben an einen AI Agent übergeben müssen, probieren Sie es aus und schlagen Sie einen neuen Schreibtisch auf!