v0.35.0
About
jj is a Git-compatible version control system that is both simple and powerful. See the installation instructions to get started.
Release highlights
-
Workspaces can now have their own separate configuration. For instance, you can use
jj config set --workspaceto update a configuration option only in the current workspace. -
After creating a local bookmark, it is now possible to use
jj bookmark trackto associate the bookmark with a specific remote before pushing it. When pushing a tracked bookmark, it is not necessary to use--allow-new. -
The new
jj git colocation enableandjj git colocation disablecommands allow converting between colocated and non-colocated workspaces.
Breaking changes
-
The
remote_bookmarks(remote=pattern)revset now includes Git-tracking bookmarks if the specifiedpatternmatchesgit. The default isremote=~exact:"git"as before. -
The deprecated flag
--summaryofjj abandonhas been removed. -
The deprecated command
jj backouthas been removed, usejj revertinstead. -
The following deprecated config options have been removed:
signing.sign-allcore.watchman.register_snapshot_triggerdiff.format
Deprecations
-
jj bisect run --command <cmd>is deprecated in favor ofjj bisect run -- <cmd>. -
jj metaedit --update-committer-timestampwas renamed tojj metaedit --force-rewritesince the old name (and help text) incorrectly suggested that the committer name and email would not be updated.
New features
-
Workspaces may have an additional layered configuration, located at
.jj/workspace-config.toml.jj configsubcommands which took layer options like--reponow also support--workspace. -
jj bookmark trackcan now associate new local bookmarks with remote. Tracked bookmarks can be pushed without--allow-new. #7072 -
The new
jj git colocationcommand provides sub-commands to show the colocation state (status), to convert a non-colocated workspace into a colocated workspace (enable), and vice-versa (disable). -
New
jj tag set/deletecommands to create/update/delete tags locally. Created/updated tags are currently always exported to Git as lightweight tags. If you would prefer them to be exported as annotated tags, please give us feedback on #7908. -
Templates now support a
.split(separator, [limit])method on strings to split a string into a list of substrings. -
-Gis now available as a short form of--no-graphinjj log,jj evolog,jj op log,jj op showandjj op diff. -
jj metaeditnow accepts-m/--messageoption to non-interactively update the change description. -
The
CryptographicSignature.key()template method now also works for SSH signatures and returns the corresponding public key fingerprint. -
Added
template-aliases.empty_commit_marker. Users can override this value in their config to change the "(empty)" label on empty commits. -
Add support for
--when.workspacesconfig scopes. -
Add support for
--when.hostnamesconfig scopes. This allows configuration to be conditionally applied based on the hostname set in .
Fixed bugs
-
jj metaedit --author-timestamptwice with the same value no longer edits the change twice in some cases. -
jj squash: fixed improper revision rebase when both--insert-afterand--insert-beforewere used. -
jj undocan now revert "fetch"/"import" operation that involves tag updates. #6325 -
Fixed parsing of
files(expr)revset expression including parentheses. #7747 -
Fixed
jj describe --stdinto append a final newline character.
Contributors
Thanks to the people who made this release happen!
- Alpha Chen (@kejadlen)
- Angel Ezquerra (@AngelEzquerra)
- ase (@adamse)
- Austin Seipp (@thoughtpolice)
- Benjamin Brittain (@benbrittain)
- bipul (@bipulmgr)
- Brian Schroeder (@bts)
- Bryce Berger (@bryceberger)
- Cole Helbling (@cole-h)
- Daniel Luz (@mernen)
- David Higgs (@higgsd)
- Defelo (@Defelo)
- Fedor (@sheremetyev)
- Gabriel Goller (@kaffarell)
- Gaëtan Lehmann (@glehmann)
- George Christou (@gechr)
- Ilya Grigoriev (@ilyagr)
- Isaac Corbrey (@icorbrey)
- James Coman (@jamescoman)
- Joseph Lou (@josephlou5)
- Lander Brandt (@landaire)
- Martin von Zweigbergk (@martinvonz)
- Michael Chirico (@MichaelChirico)
- Owen Brooks (@owenbrooks)
- Peter Schilling (@schpet)
- Philip Metzger (@PhilipMetzger)
- Remo Senekowitsch (@senekor)
- Ross Smyth (@RossSmyth)
- Scott Taylor (@scott2000)
- Steve Fink (@hotsphink)
- Steve Klabnik (@steveklabnik)
- Theo Buehler (@botovq)
- Theodore Dubois (@tbodt)
- Theodore Keloglou (@sirodoht)
- Yuya Nishihara (@yuja)