Was ist ein worktree?

git worktree ist eine git-Funktion, die ein Repository gleichzeitig als „anderer Ordner plus anderer Branch“ öffnet. Dein gewohnter Arbeitsordner bleibt, wie er ist, während du direkt daneben einen zweiten, unabhängigen Arbeitsbereich anlegst.

Wenn du eine Sitzung in TinyAgentDeck mit dem Schalter „In isoliertem worktree erstellen“ auf AN startest, werden automatisch ein eigener Arbeitsordner und ein eigener Branch tad/session-<Sitzungs-ID> erstellt, und claude startet dort. So können zwei oder mehr Agenten im selben Repository gleichzeitig laufen, ohne dass ihre Dateien kollidieren.

Wann verwenden?

Schalte es AN, wenn du zwei oder mehr Sitzungen im selben Repository parallel laufen lassen willst. Für ein separates Projekt oder eine einmalige Aufgabe reicht AUS (direkter Start im Projektordner).

Eine Sitzung in einem worktree starten

Wenn du „In isoliertem worktree erstellen“ unter „Sitzung starten“ im Projekt-Dashboard aktivierst, erledigt TinyAgentDeck im Hintergrund Folgendes.

  • Legt den worktree im app-verwalteten Ordner an (unter ~/Library/Application Support/…/worktrees/) — die Umgebung deines Repositorys bleibt aufgeräumt
  • Erstellt einen eigenen Branch tad/session-<Sitzungs-ID>
  • Startet claude mit diesem worktree-Ordner als aktuellem Verzeichnis

Dein gewohnter Arbeitsordner (der mit ausgechecktem main) wird nicht angetastet. Ein worktree ist ein „isolierter paralleler Arbeitsbereich“, den du wieder zusammenklappen kannst, wenn du fertig bist.

Wenn du fertig bist

Änderungen, die du im worktree gemacht hast, liegen nur auf dem Branch dieser Sitzung — sie sind noch nicht in main und noch nicht in deinem gewohnten Arbeitsordner. Der Trick ist also, sie vor dem Aufräumen „hereinzuholen“.

Das zuerst wissen

Nicht-committete Änderungen gehen verloren, wenn der worktree gelöscht wird. Selbst wenn ein Deploy-Skript sie bereits in die Produktion gebracht hat, stehen sie nicht in der git-Historie. Beim nächsten Deploy aus main in die Produktion können die Änderungen zurückgesetzt werden.

Deshalb lautet die Reihenfolge immer committen → in main mergen → aufräumen.

Der einfachste Weg — überlass es Claude

Im Terminal der worktree-Sitzung sitzt dein gewohntes Claude Code. Du musst keine git-Befehle selbst eintippen. Wenn du fertig bist, bitte einfach in normaler Sprache darum.

Beispiel (so wie es ist einfügbar).

Committe alle Änderungen in diesem worktree und merge sie in den main-Branch.
Committe keine Dateien mit Geheimnissen wie .env.local.
Sag mir Bescheid, wenn der Merge fertig ist.

Was Claude tut (du schaust nur zu).

  1. Prüft die Änderungen mit git status und lässt Geheimnisse anhand von .gitignore weg
  2. Committet mit einer aussagekräftigen Nachricht
  3. Holt den Branch des worktree in den main-Checkout
  4. Meldet, dass der Merge fertig ist (und weist auf Konflikte oder nicht-committete Änderungen hin)

Wenn die Meldung kommt, prüfst du nur drei Dinge: ① wurde committet ② wurde in main gemergt ③ wurden Geheimnisse (.env.local usw.) weggelassen. Wenn alles passt, musst du nur noch die Karte schließen. Da committet wurde — keine Änderungen übrig — löscht TinyAgentDeck den worktree automatisch, und der übrige Branch tad/session-… lässt sich mit einem Klick im Bereich „Verwaiste worktrees“ entfernen.

Warum nicht auch das Aufräumen an Claude geben?

Das Claude im worktree kann weder den worktree, in dem es gerade steckt, noch den ausgecheckten Branch selbst löschen (git verweigert dies als „in Benutzung“). Das physische Aufräumen ist daher Aufgabe der App. Claudes Rolle ist „committen → mergen → melden“. Danach erledigt das Schließen der Karte den Rest.

Varianten der Bitte

Nicht jedes Mal bitten — schreib in die „erste Anweisung“ beim Start der Sitzung „wenn du fertig bist, committen und in main mergen“, dann passiert es am Ende automatisch.

Auch auf GitHub behalten — füge deiner Bitte „und führe nach dem Merge git push origin main aus“ hinzu. Der Merge in main pusht noch nicht zum Remote; füge das hinzu, wenn du ein Backup oder eine geteilte Historie willst (ist die Produktion bereits deployt, läuft die Seite auch ohne Push).

Du arbeitest mit PRs — statt direkt in main zu gehen, bitte „committen, pushen und einen PR öffnen“, und Claude macht das.

Wenn du es lieber selbst machst — manuelle Befehle

Wenn du wissen willst, was im Inneren passiert, oder Schritt für Schritt von Hand vorgehen möchtest, hier die drei Schritte. Überspring sie, wenn du es Claude überlässt.

1

Im worktree committen

Führe dies im Terminal der Sitzung aus, in der du gearbeitet hast.

git status                  # Sehen, was sich geändert hat (prüfen, dass keine Geheimnisse mit drin sind)
git add -A
git commit -m "Eine klare Nachricht"
git branch --show-current   # → tad/session-… notieren (wird gleich gebraucht)
2

In main mergen

Merge im Terminal deines gewohnten Arbeitsordners (der mit ausgechecktem main, nicht der worktree) den in Schritt 1 notierten Branch-Namen.

git merge tad/session-…

Selbst wenn derselbe Inhalt bereits in der Produktion live ist, ändert ein erneutes Ausführen des Deploy-Skripts danach nichts (idempotent). So sind main und Produktion gleich.

3

Den worktree aufräumen

Schließe einfach die Karte in TinyAgentDeck. Da du in Schritt 1 committet hast — keine Änderungen übrig — löscht die App den worktree automatisch.

Der übrige Branch tad/session-… wurde in Schritt 2 gemergt und wird nicht mehr gebraucht. Wähle „Branch ebenfalls löschen“ im Bereich „Verwaiste worktrees“ des Projekt-Dashboards oder entferne ihn von Hand.

git branch -d tad/session-…   # Den gemergten Branch löschen

Keine Geheimnisse committen

Dateien mit .env.local, API-Schlüsseln oder Geheimnissen dürfen niemals committet werden. Stehen sie in .gitignore, erscheinen sie nicht in git status (taucht doch eine auf, mach kein git add).

Umgebungsvariablen, die du nur auf der worktree-Seite geschrieben hast, existieren im main-Ordner nicht. Nur wenn du lokal testen willst, füge dieselben Werte auch der .env.local auf der main-Seite hinzu. Produktions-Geheimnisse werden separat als Umgebungsvariablen bei Cloudflare und Ähnlichem verwaltet, daher betrifft sie diese Arbeit nicht.

Wenn du ohne Commit verwerfen willst

Im seltenen Fall „es ist bereits in der Produktion live, und ich brauche weder den Code noch die Historie“ kannst du die Karte ohne Commit schließen und im Bestätigungsdialog Erzwungenes Löschen wählen — die Produktion läuft weiter. Da aber gar nichts in git zurückbleibt, ist das grundsätzlich nicht empfohlen.

Verwaiste worktrees aufräumen

worktrees, die außerhalb der App erstellt wurden oder aus irgendeinem Grund übrig geblieben sind, werden als „verwaiste worktrees“ im Projekt-Dashboard aufgelistet. Du kannst sie dort löschen, und mit aktiviertem „Branch ebenfalls löschen“ wird der Branch entfernt, nachdem der worktree weg ist (eine unumkehrbare Aktion, daher mit Rückfrage).

Häufige Fragen

Ist es in Ordnung, den Commit und den Merge in main auch von Claude machen zu lassen?

Ja — das ist der einfachste Weg. Füge die obige Bitte ins Terminal der worktree-Sitzung ein. Claude entscheidet das, inklusive des Weglassens von Geheimnissen, und meldet das Ergebnis. Wer git ohnehin Claude überlässt, für den ändert sich nichts.

Wenn ich den worktree lösche, geht der Branch auch weg?

Nein. worktree löschen und Branch löschen sind getrennt. Ist er gemergt: git branch -d <Name>; um einen nicht gemergten zu erzwingen: git branch -D <Name>.

Ich habe vergessen, in main zu mergen, und aufgeräumt.

Solange du committet hast, ist der Branch noch da, du kannst ihn also jederzeit mit git merge tad/session-… hereinholen. Der Branch-Name leitet sich aus dem worktree-Ordnernamen (der Sitzungs-ID) als tad/session-<Sitzungs-ID> ab.

Ich kenne den Branch-Namen nicht.

Prüfe mit git branch --show-current im Terminal des worktree oder mit git worktree list / git branch --list 'tad/session-*' im Repository.

TinyAgentDeck holen

worktree-Isolation ist eingebaut. Sitzungen parallel laufen lassen und am Ende einfach zusammenklappen.

Kostenlose Testversion herunterladen