Branches und Review
Eine Branch-Sitzung ist eine Sitzung, die auf ihrem eigenen Git-Branch arbeitet, in ihrem eigenen Checkout des Ordners, aus dem sie kam. Darunter ist das ein Git-Worktree: eine zweite Arbeitskopie desselben Repositories, die seine Historie teilt, aber eigene Dateien und einen eigenen Index hat. Ihre Arbeit in der Ursprungssitzung wird nicht berührt. Ist der Branch fertig, mergen Sie ihn von der Sitzung selbst aus zurück.
Nutzen Sie einen Branch, um eine Idee neben dem Hauptstrang zu probieren, um eine Aufgabe auf mehrere Agenten zu verteilen, die sich nicht über die nicht committeten Dateien der anderen stolpern, oder um einen Agenten etwas erkunden zu lassen, das Sie vielleicht wegwerfen.
Dieses Kapitel behandelt außerdem das Review-Fenster, das für jede Sitzung mit einem Ordner funktioniert, ob Branch oder nicht.
Einen Branch starten
Zweigen Sie jede Sitzung ab, die einen Ordner hat:
- Rechtsklick in der Seitenleiste und Neuer Branch…
- Neuer Branch… im Menü ⋯ des Sitzungs-Headers
- Neuer Branch… in der ⌘K-Palette, das auf die Sitzung auf der Bühne wirkt
Das Blatt Neuer Branch liest „Eine eigene Sitzung, auf einer Kopie von Ordner mit eigenem Git-Branch. Ihre Arbeit in „Sitzung“ wird nicht berührt; mergen Sie sie zurück, wenn sie fertig ist.“ Es hat diese Teile:
| Feld | Zweck |
|---|---|
| Was soll sie tun? | Die erste Nachricht der neuen Sitzung, zum Beispiel „Versuche, den Sitzungs-Cache auf SQLite umzustellen“. Leer lassen, um den Agenten untätig zu öffnen. |
| Name | Der Name der Sitzung und die Quelle ihres Branch-Namens. Leer lassen, und der Name kommt aus der Nachricht. |
| Agent | Welcher Agent im Branch läuft. Voreingestellt ist der Agent der Sitzung, von der Sie abgezweigt haben. |
| Ausgehend von | Der Branch, von dem gestartet wird. Der erste Eintrag ist der aktuelle Branch des Ordners, „Branch (aktuell)“, oder Der aktuelle Commit bei einem losgelösten Checkout. Es folgen die anderen lokalen Branches, die zuletzt committeten zuerst. Siehe den Hinweis unten. |
- Ausgehend von (aktueller Branch): „Bei seinem letzten Commit — nicht committete Änderungen bleiben zurück. Merged dorthin zurück.“
- Ausgehend von (ein anderer Branch): „Beim letzten Commit von Branch, und es merged zurück in Branch.“ Der Branch, von dem Sie starten, ist auch der, in den die Sitzung zurückmerged.
Unter den Feldern zeigt das Blatt den Branch, den es anlegen wird, wt/<name>. Der Name wird kleingeschrieben, andere Zeichen werden zu Bindestrichen. Klicken Sie Starten (⌘⏎).
Hinweis: Nur committete Arbeit wird abgezweigt. Nicht committete Änderungen im Ursprungsordner bleiben dort und werden nicht in den neuen Checkout kopiert.
Was das Blatt zuerst prüft
Das Blatt fragt die Maschine, was der Ordner ist („Ordner wird geprüft…“), und passt sich an:
- Ein Repository: die oben beschriebene Auswahl Ausgehend von. Hat das Repository eine Datei
.worktreeinclude, ergänzt das Blatt „Kopiert außerdem herein, wie .worktreeinclude sagt: …“ und dahinter die dort gelisteten Dateien. Das sind Dateien, die Git nicht verfolgt, etwa eine lokale.env, die in den neuen Checkout kopiert werden. - Ein Repository ohne Commit: „Das Repository hat noch keinen Commit, der Branch startet daher von einem leeren ersten Commit. Dateien im Ordner bleiben zurück.“
- Kein Repository: „Ordner ist noch kein Git-Repository, und ein Branch braucht eines.“ Häkchen bei Eines daraus machen (git init), um dort
git initauszuführen. „Alles im Ordner geht in einen ersten Commit, von dem der Branch startet.“ Starten ist deaktiviert, solange dieses Kästchen nicht gesetzt ist. - Die Maschine läuft nicht: „Die Maschine läuft nicht — der Ordner wird geprüft, sobald sie startet.“ Die Option Wenn es kein Git-Repository ist, eines daraus machen greift, sobald die Maschine startet.
Tipp: Agenten können auch Branches starten, mit dem Werkzeug
worktree_createdes MCP-Serversbromure-delegation. Ein solcher Branch erscheint genau wie einer, den Sie gestartet haben. Siehe Agenten arbeiten zusammen.
Eine Branch-Sitzung
Eine Branch-Sitzung ist in der Seitenleiste unter der Sitzung verschachtelt, aus der sie kam. Ihre Zeile ergänzt ein Branch-Zeichen und eine Statuszeile wie „3 Commits“. Die Statuszeile zählt:
- Commits vor dem Branch, aus dem sie kam („1 Commit“, „n Commits“)
- nicht committete Dateien („n nicht committete Dateien“)
- Commits, die sie hinterher ist („n zurück“)
Bis zur ersten Änderung liest sie „noch keine Änderungen“. Die Zahlen werden, solange sie läuft, etwa alle 20 Sekunden von der Maschine gelesen.
Im Sitzungs-Header zeigt neben dem Ordner ein Chip den Branch-Namen und dieselben Zahlen. Überfahren Sie ihn, um „Ihr eigener Git-Branch, aus Eltern — mergen Sie ihn zurück, wenn er fertig ist“ zu lesen.
Mergen
Sobald der Branch Änderungen hat, zeigt der Header eine geteilte Schaltfläche, In Eltern mergen.
Klicken Sie den Hauptteil, um den Branch in den zu mergen, aus dem er kam. Danach werden Checkout und Branch entfernt und die Sitzung wird archiviert. Die Sitzung bleibt lesbar, mit der Statuszeile „Gemergt in Eltern“.
Der Pfeilteil öffnet die anderen Optionen, die auch im Abschnitt Branch der Menüs ⋯ und des Kontextmenüs der Sitzung stehen:
| Eintrag | Was er tut |
|---|---|
| Änderungen prüfen | Öffnet das Review-Fenster. |
| In Eltern mergen | Wie die Schaltfläche (nur Menüs). |
| Squash und in Eltern mergen | Setzt den ganzen Branch als einen Commit ab („Squash-Merge Branch“) und entfernt dann den Checkout. |
| Mergen, auf dem Branch weiterarbeiten | Merged, behält aber Checkout, Branch und Sitzung, damit der Agent weitermachen kann. |
| Pull-Request öffnen | Bittet den Agenten, Offenes zu committen, den Branch zu pushen und mit gh pr create einen Pull-Request gegen den Eltern-Branch zu öffnen. Er antwortet mit der URL. Das braucht eine GitHub-Anmeldung auf der Maschine. Siehe Anmeldedaten. |
| Terminal hier öffnen | Ein Linux-Terminal im Checkout des Branches. |
| Branch verwerfen… | Löscht Checkout, Branch und Sitzung nach einer Bestätigung. |
Ein Merge läuft so:
- Ein sauberer Branch merged sofort. Während er läuft, zeigt der Header „Mergt in Eltern…“.
- Nicht committete Arbeit oder ein Konflikt geht an den Agenten. Hat der Branch nicht committete Dateien, oder kollidiert der Merge, nimmt Bromure den Merge zurück und lässt alles sauber. Es bittet dann den Agenten der Sitzung, in ihrer Unterhaltung, die Arbeit zu committen, zu mergen und auftretende Konflikte zu lösen. Der Header liest „Mergt in Eltern — der Agent bringt es zu Ende“, und Sie können im Chat mitlesen. Hat Git auf der Maschine keine Identität, wird der Merge-Commit als
Bromure <bromure@localhost>gemacht. - Bromure prüft, dass der Merge gelandet ist, bevor es irgendetwas entfernt. Ist er nach 30 Minuten nicht gelandet, wird der Zustand Zusammenführung hängt: „Der Merge ist nach 30 Minuten nicht gelandet — fragen Sie den Agenten, wie es steht.“ Die Schaltfläche liest dann Zusammenführen erneut versuchen.
Ein Merge, der beim Beenden lief, wird beim nächsten Start wieder aufgenommen.
Wenn ein Agent zu mergen bittet
Ein Agent kann mit dem Werkzeug worktree_merge bitten, einen Branch zu mergen. Er kann für seinen eigenen Branch bitten oder für einen, der von seiner Sitzung gestartet wurde. Er merged nie von sich aus. Unter dem Header der Sitzung erscheint ein Banner: „Agent bittet, Branch in Ziel zu mergen“. Die Zeile darunter gibt die Zahlen des Branches, „Als ein gesquashter Commit“, wenn der Agent um einen Squash bat, und „Der Checkout wird entfernt, sobald es gelandet ist.“
- Änderungen prüfen öffnet das Review-Fenster.
- Später lehnt ab. Dem Agenten wird gesagt, nicht erneut zu fragen, außer Sie bringen es auf.
- Zusammenführen (oder Squash und zusammenführen) führt den Merge wie oben beschrieben aus. Ist er gelandet, wird der fragende Agent informiert.
Eine Branch-Sitzung archivieren oder löschen
Eine Branch-Sitzung zu archivieren oder zu löschen, deren Arbeit nicht gemergt ist, fragt, was aus dem Branch wird: „„Sitzung“ archivieren — und ihren Branch?“ oder „„Sitzung“ löschen — und ihren Branch?“.
- Branch behalten lässt Checkout und Branch auf der Maschine, damit Sie ihn mergen oder später aufnehmen können. Die Maschine öffnet ihn beim Start nicht mehr. Die Sitzung fortzusetzen öffnet ihn wieder.
- Branch verwerfen löscht Checkout und Branch mitsamt der Sitzung. „Branch hat Arbeit, die nicht gemergt ist (…)“ sagt Ihnen, was Sie verlieren würden.
Wurde auf dem Branch nichts getan („Auf Branch wurde noch nichts getan, es ist also nichts zu verlieren, wenn man ihn entfernt.“), ist Branch verwerfen die Voreinstellung.
Ausdrücklich zu verwerfen, mit Branch verwerfen…, bestätigt immer zuerst: „„Sitzung“ verwerfen? Der Branch Branch und sein Checkout werden mit der Sitzung gelöscht. Das lässt sich nicht widerrufen.“
Branches auf einer Maschine
Branches verliert man leicht aus dem Blick, sobald ihre Sitzung archiviert, gemergt oder weg ist. Branches auf dieser Maschine… öffnet ein Fenster, das jeden Branch listet, den Bromure auf einer Maschine angelegt hat. Sie finden es im Menü ⋯ des Sitzungs-Headers und beim Rechtsklick auf die Maschinen-Kapsel im Header.
Das Fenster, betitelt „Branches auf Maschine“, zählt „n Branches · n zurückgelassen“. Jede Zeile zeigt:
- den Namen des Branches und wessen er ist: In einer Sitzung, Sitzung pausiert, Sitzung archiviert, Zusammengeführt, oder Keine Sitzung
- den Branch, einen Pfeil und den Branch, in den er merged
- was er enthält und wann zuletzt committet wurde
- seinen Checkout-Pfad auf der Maschine
Die Zeilen-Aktionen hängen davon ab, wem der Branch gehört:
- Prüfen und Sitzung zeigen für einen Branch, der eine Sitzung hat.
- In einer Sitzung öffnen für einen ohne. Das startet den Standard-Agenten der Maschine im Checkout des Branches. Die neue Sitzung ist eine vollwertige Branch-Sitzung, also funktionieren Mergen, Review und Verwerfen alle.
- Die Papierkorb-Schaltfläche, „Den Branch und seinen Checkout verwerfen“, fragt vorher. Hat der Branch eine archivierte Sitzung, wird auch diese gelöscht.
Nur ohne Sitzung filtert die Liste auf die zurückgelassenen Branches. ⌘R aktualisiert. Branches werden live von der Maschine gelesen, sie muss also laufen: „Branches werden live von der Maschine gelesen — starten Sie sie und aktualisieren.“
Das Review-Fenster
Das Review-Fenster zeigt die Änderungen einer Sitzung als Diff und lässt Sie sie kommentieren. Es ist nicht nur für Branches. Es gibt drei Wege, es zu öffnen:
- Änderungen prüfen, aus dem Menü ⋯ der Sitzung, den Branch-Menüs, der ⌘K-Palette, oder dem Merge-Anfrage-Banner.
- Die Zeile … Dateien geändert unter einer Antwort des Agenten in dem Chat. Das Fenster öffnet dann nur die Dateien, die dieser Zug geändert hat („In diesem Durchgang geändert“). Klicken Sie Alle zeigen für alles, und Dieser Durchgang, um wieder einzuengen.
- Prüfen im Branches-Fenster.
Das Fenster ist betitelt „Review — Sitzung“. Seine Teile:
- Die Vergleichsauswahl („Womit die Änderungen verglichen werden“):
- Seit Eltern gibt es nur für Branch-Sitzungen und ist dort die Voreinstellung. Sie zeigt alles, was der Branch hat und seine Eltern nicht.
- Uncommittet zeigt noch nicht committete Änderungen. Für andere Sitzungen ist das die Voreinstellung.
- Letzter Commit zeigt den neuesten Commit.
- Die Dateiliste zeigt, wie viele Dateien sich geändert haben, „n von n gesehen“ mit einem Fortschrittsbalken, und die Commits des Branches. Neue Dateien, die Git noch nicht verfolgt, sind enthalten und mitgezählt („n neue Dateien noch nicht zu Git hinzugefügt“). Klicken Sie eine Datei, um zu ihr zu springen.
- Als gesehen markieren. Der Kreis neben jeder Datei markiert sie als angesehen, und sie klappt weg. Die Markierung hängt am aktuellen Diff der Datei, kommt also zurück, wenn die Datei sich wieder ändert.
- Das Diff. Überfahren Sie eine Zeile, um sie zu kommentieren. Sie können auch eine Datei kommentieren („Ein Kommentar zu dieser Datei“) oder, im Feld unten, die ganze Änderung.
- Der Header hat eine Schaltfläche Aktualisieren (⌘R) und Terminal öffnen, plus die Merge-Schaltfläche bei einer Branch-Sitzung.
Kommentare
Ein Kommentar, den Sie hinzufügen (⏎), ist ein Entwurf: „er wartet mit den anderen, bis Sie sie senden“. ⌥⏎ fügt eine neue Zeile ein. Das × entfernt einen Entwurf.
n Kommentare an den Agenten senden (⇧⌘⏎) sendet alle Entwürfe als eine nummerierte Nachricht an den Agenten der Sitzung, jeden Kommentar mit Datei und Zeile, und bittet den Agenten, sie zu bearbeiten. Läuft der Agent nicht, setzt die Nachricht ihn fort. Gesendete Kommentare bleiben im Fenster, markiert als „gesendet“. Kommentare und Gesehen-Markierungen werden mit der Sitzung gespeichert und überleben das Schließen des Fensters.
Die Änderungen werden live von der Maschine gelesen. Ist sie aus, sagt das Fenster „Maschine nicht erreichbar“: starten Sie die Maschine und aktualisieren.
Hinweis: Coding-Aufgaben nutzen dasselbe Review-Fenster, mit aufgabenspezifischen Schaltflächen wie Mit n Kommentaren zurückschicken.
Maschinen-Terminals
Die Tabs des Linux-Terminals einer Maschine haben weiterhin die älteren Worktree-Aktionen: Neuer Worktree (⇧⌘G), Worktree zusammenführen (⇧⌘M) und Terminal anhängen, im Menü Arbeitsbereiche. Siehe Maschinen. Für Agenten-Sitzungen ersetzen die Branch-Aktionen oben sie.
Auf einem gespiegelten Server und unter iOS
Branch-Sitzungen, Mergen, das Merge-Anfrage-Banner, das Review-Fenster und das Branches-Fenster funktionieren alle in einem Fat-Client-Fenster, das einen anderen Mac spiegelt. Die iPhone- und iPad-Clients bieten Neuer Worktree… im Langdruck-Menü einer Sitzung, das dasselbe Branch-Blatt öffnet. Wo ihr Branch-Menü erscheint, öffnet Branch verwerfen… ein Untermenü, Verwerfen — das lässt sich nicht widerrufen, anstelle des Bestätigungsdialogs.