Bookmarks sind keine Branches, und das ist der Punkt

Teil 8 von 9.

jjs benannte Zeiger “Bookmarks” statt “Branches” zu nennen sah anfangs nach unnötigem Vokabular aus. Ist es nicht. Ein Git-Branch rückt jedes Mal automatisch vor, wenn du committest, während er ausgecheckt ist, das Ref und deine aktuelle Arbeitslinie sind dasselbe, bis du explizit wechselst. Ein jj-Bookmark ist davon entkoppelt: Du kannst mehrere Commits über der letzten Stelle arbeiten, auf die ein Bookmark zeigt, und es bleibt einfach dort, bis du es mit jj bookmark set verschiebst oder indem du den Commit rebasierst, an den es angehängt ist.

Diese Entkopplung ist es, die die eigentliche Publish-Schleife leichter anfühlen lässt:

jj bookmark create feature-colors
jj git push --bookmark feature-colors

und, sobald ein PR gemerged wird und das main des Remotes sich bewegt,

jj git fetch

ist oft der gesamte “Aufholen”-Schritt, weil ein normaler Merge oder Squash-Merge weiterhin ein Fast-Forward von der alten Spitze ist und ein getracktes Bookmark beim Fetch fast-forwardet, ohne dass man es ihm sagen muss. Vergleiche das damit, sich git branch -f oder git merge origin/main je nach Laune zu merken.

Das Detail, das ich am meisten schätzte, weil es eine ganze Kategorie von “habe ich vergessen, den Branch-Zeiger zu aktualisieren”-Fehlern beseitigt: Einen Commit zu rebasieren, auf den ein Bookmark zeigt, nimmt das Bookmark automatisch mit. jj rebase -d main auf einem Feature-Commit verschiebt sein Bookmark in derselben Operation mit. Und wenn das Rebase-Ziel bereits dieselbe Änderung enthält, die exakte Situation nach einem Squash-Merge, merkt jj, dass der Diff bereits vorhanden ist, und lässt den nun leeren Commit fallen, statt einen streunenden No-op-Commit zurückzulassen, was der eine Teil des Git-Äquivalents ist, für den ich das Flag immer vergesse (--skip-empty).

Nichts davon erforderte, den PR-basierten Workflow aufzugeben, den mein Team ohnehin verwendet. Es ist derselbe GitHub-Flow, derselbe Review-Prozess, derselbe Merge-Button. Nur die lokale Buchführung zwischen “ich habe ein paar Commits” und “das Remote spiegelt sie wider” wurde spürbar leichter.