Historie bearbeiten
In jj ist das Umschreiben der Historie Alltagsarbeit, kein riskanter Notausgang. Wenn du einen Commit änderst, rebased Wyrm alles, was darauf aufbaut, für dich. Jede der folgenden Bearbeitungen ist eine einzige Operation, Undo nimmt sie also zurück.
Standardmäßig behandelt jj deinen Trunk (etwa main@origin) und Tags als unveränderlich und weigert sich, sie umzuschreiben. Der 🛡-Schalter hebt das auf, wenn du es wirklich willst.
Die meisten Befehle findest du im Rechtsklickmenü eines Commits im Log unter Commit-Operationen. Die selteneren stehen unter Mehr.
Einen Commit aufteilen
Abschnitt betitelt „Einen Commit aufteilen“Wähle den Commit aus und wähle Aufteilen…. Hake in Commit aufteilen die Dateien an, die in den ersten Commit sollen, oder klappe die Hunks einer Datei auf und wähle einzelne Hunks. Klicke auf Aufteilen. Der Rest bleibt in einem zweiten Commit obendrauf.
Du kannst auch direkt aus dem Diff aufteilen: Jeder Hunk-Kopf hat einen Button Aufteilen.
Squashen
Abschnitt betitelt „Squashen“- In Elternteil squashen (
S): den ausgewählten Commit in seinen Elternteil falten. - In einen anderen Commit squashen: Wähle den Commit aus, klicke dann mit der rechten Maustaste auf den Commit, in den er hinein soll, und wähle Squash … in ….
- Mehrere Commits auf einmal: Wähle eine Folge benachbarter Commits aus und wähle N Commits zusammen squashen.
- Squash mit Optionen… (unter Mehr) kann den geleerten Commit behalten oder nur die Beschreibung des Elternteils übernehmen.
Absorbieren
Abschnitt betitelt „Absorbieren“Ein paar Dinge in deiner Working Copy korrigiert, die eigentlich in ältere Commits gehören? Wähle @ aus und wähle In Vorfahren absorbieren (A). jj verschiebt jede geänderte Zeile in den Commit, der sie zuletzt angefasst hat, und lässt alles, was es nicht zuordnen kann, in @.
Mit Hunks und einzelnen Zeilen arbeiten
Abschnitt betitelt „Mit Hunks und einzelnen Zeilen arbeiten“Im Diff jedes Commits hat jeder Hunk-Kopf vier Buttons:
- Squash ↑: den Hunk in den Eltern-Commit verschieben.
- Verschieben…: ihn in einen beliebigen anderen Commit verschieben.
- Aufteilen: ihn in einen eigenen Commit herauslösen.
- Verwerfen: ihn aus diesem Commit entfernen, sodass die Datei dort wieder auf dem Stand des Elternteils ist.
Um mehrere Hunks zu bearbeiten, hake sie an (Space hakt einen Hunk an); mit ⇧-Klick wählst du einzelne Zeilen. Die Leiste über dem Diff zeigt, wie viele Hunks und Zeilen ausgewählt sind. Mit einer Auswahl squasht ⇧S sie und ⌫ verwirft sie. Vor dem Verwerfen fragt Wyrm nach. Binärdateien, umbenannte oder konfliktbehaftete Dateien bieten nur Aktionen für die ganze Datei.
Ein Rechtsklick auf einen Hunk bietet dieselben Bewegungen: Hunk in Elternteil squashen, Hunk-Änderungen verwerfen, Hunk verschieben nach….
Ganze Dateien zwischen Commits verschieben
Abschnitt betitelt „Ganze Dateien zwischen Commits verschieben“Wähle im Revisionsbereich eine oder mehrere Dateien aus und nutze In Elternteil squashen, Verschieben nach… oder Dateien wiederherstellen. Verschieben nach… öffnet Änderungen verschieben nach…: Gib die Zielrevision ein (ein Bookmark, eine Change-ID oder ein Revset) und klicke auf Verschieben.
Du kannst auch eine Datei oder einen Hunk auf einen Commit im Log ziehen und Hier squashen wählen.
Eine Datei in jeder beliebigen Revision bearbeiten oder löschen
Abschnitt betitelt „Eine Datei in jeder beliebigen Revision bearbeiten oder löschen“Klicke mit der rechten Maustaste auf eine Datei in den Änderungen eines Commits:
- In dieser Revision bearbeiten… öffnet die Datei so, wie sie in diesem Commit ist. Speichere mit
⌘S: Wyrm schreibt diesen Commit um und rebased seine Nachfahren darauf. - Aus dieser Revision löschen… entfernt die Datei nur aus diesem Commit; spätere Commits werden rebased.
Das Dateien-Panel hat dieselben beiden Aktionen.
Neu anordnen, rebasen und mehr
Abschnitt betitelt „Neu anordnen, rebasen und mehr“- Neu anordnen (
R, mit zwei oder mehr ausgewählten Commits): Zieh sie in die gewünschte Reihenfolge und klicke auf Neuanordnung anwenden. - Drag & Drop: Zieh einen Commit auf einen anderen für Hier rebasen, auf die Linie zwischen zwei Commits für Hier einfügen oder auf einen Merge, um ihn als Elternteil hinzuzufügen.
- Auf einen anderen Commit rebasen: Wähle den Commit aus, klicke mit der rechten Maustaste auf das Ziel und wähle Rebase … auf ….
- Vom Elternteil wiederherstellen, Duplizieren, Zurücknehmen (revert) und Aufgeben… stehen im selben Rechtsklickmenü. Mehr ergänzt Eltern ändern…, Eltern vereinfachen, Wiederherstellen aus… und die übrigen Varianten.
Entsteht beim Umschreiben ein Konflikt, hält jj ihn im Commit fest, statt dich aufzuhalten. Siehe Konfliktlösung.