Zum Inhalt springen

Jujutsu (jj) - Git-kompatibler Versionskontroll Cheatsheet

Jujutsu (jj) - Git-kompatibler Versionskontroll Cheatsheet

Jujutsu (jj) ist ein modernes Versionskontrollsystem, das Git-kompatibel ist — es nutzt ein Git-Repository als Backend, daher können Sie es in bestehenden Repos übernehmen und mit Teamkollegen interoperieren, die Git verwenden. Sein Modell ist anders und für viele einfacher: die Working Copy ist selbst ein Commit (kein separater Staging Area), Konflikte sind First-Class Objekte, die Sie später committen und auflösen können, und jede Operation wird in einem Operations-Protokoll aufgezeichnet, das Sie rückgängig machen können. Es gibt standardmäßig keine Branches im Git-Sinne; Sie arbeiten mit Änderungen, die durch stabile Change IDs gekennzeichnet sind.

Installation

PlattformBefehl
Cargocargo install --locked jj-cli
macOS (Homebrew)brew install jj
Arch Linuxsudo pacman -S jujutsu
Nixnix profile install nixpkgs#jujutsu
Windows (Scoop)scoop install jujutsu
Verifizierenjj --version

Einrichtung

BefehlBeschreibung
jj config set --user user.name "Your Name"Ihren Namen setzen
jj config set --user user.email "you@example.com"Ihre E-Mail setzen
jj git init --colocateJj in einem bestehenden Git-Repo initialisieren (behält .git)
jj git clone <url>Ein Git-Repo mit jj klonen
jj git initEin neues jj-Repo erstellen (natives Backend)

Kernkonzepte

TermBedeutung
ChangeEine logische Änderung mit stabiler Change ID (übersteht Umschreibungen)
CommitEin Snapshot; die Working Copy ist immer ein Commit (@)
@Der aktuelle Working-Copy Commit
RevsetEine Abfragesprache zum Auswählen von Commits
Operation logVerlauf von Repo-Operationen, jede rückgängig machbar
BookmarkEin benannter Zeiger (wird beim Push zu einem Git-Branch)

Alltäglicher Workflow

BefehlBeschreibung
jj statusWorking-Copy Änderungen anzeigen
jj logDas Commit-Diagramm anzeigen
jj diffDiff des Working-Copy Commits
jj describe -m "msg"Die aktuelle Commit-Nachricht setzen/ersetzen
jj newEine neue Änderung auf der aktuellen starten
jj new <rev>Eine neue Änderung auf einem bestimmten Commit starten
jj edit <rev>Einen bestehenden Commit zur Working Copy machen
jj commit -m "msg"@ beschreiben und eine neue Änderung starten (Git-ähnlich)

History verschieben und bearbeiten

BefehlBeschreibung
jj squashÄnderungen von @ in seinen Parent verschieben
jj squash -iInteraktiv auswählen, was zu squashen ist
jj splitDen aktuellen Commit in zwei aufteilen
jj rebase -d <dest>Eine Änderung auf ein Ziel rebasen
jj abandon <rev>Einen Commit löschen
jj duplicate <rev>Einen Commit an anderer Stelle kopieren

Die Killer-Funktion: Undo

BefehlBeschreibung
jj op logJede durchgeführte Operation auflisten
jj undoDie letzte Operation rückgängig machen
jj op restore <id>Das Repo zu einem vorherigen Operationsstatus wiederherstellen

Da jeder Befehl eine Operation ist, können fast alle rückgängig gemacht werden — einschließlich Rebases und Aufgaben.

Bookmarks und Git Interop

BefehlBeschreibung
jj bookmark create main -r @Ein Bookmark erstellen (≈ Git Branch)
jj bookmark set main -r @Ein Bookmark auf einen Commit verschieben
jj git fetchVon der Git-Remote abrufen
jj git pushBookmarks zur Git-Remote pushen
jj git push -c @Einen Remote-Branch aus der aktuellen Änderung erstellen

Revsets (Commits auswählen)

RevsetWählt
@Working-Copy Commit
@-Parent der Working Copy
mainDen Commit, auf den ein Bookmark zeigt
mine()Ihre Commits
ancestors(@)Alle Ancestors von @
jj log -r "description(glob:'fix*')"Commits, deren Nachricht passt

Häufige Arbeitsabläufe

# Jj in einem bestehenden Git-Repo übernehmen, weiterhin mit Git-Remotes arbeiten
jj git init --colocate
jj log

# Machen Sie eine Änderung ohne zu staggen — bearbeiten Sie einfach Dateien, dann beschreiben Sie
# (Dateien werden automatisch in @ gespeichert)
jj describe -m "Add feature"
jj new                       # start the next change

# Oops — die letzte Sache, die Sie getan haben, rückgängig machen (auch ein Rebase)
jj undo

# Den aktuellen Change als Branch für Review pushen
jj bookmark create feature -r @
jj git push -c @

jj vs. Git

AspektJujutsu (jj)Git
Staging AreaKeine (Working Copy ist ein Commit)Index/Staging
KonflikteFirst-Class, commitableMüssen vor dem Fortfahren gelöst werden
UndoUniversal via Op LogReflog (partiell)
BranchesBookmarks (optional)Branches (zentral)
BackendGit-kompatibelGit

Ressourcen