About
jj is a Git-compatible version control system that is both simple and powerful. See the installation instructions to get started.
Breaking changes
-
In revsets, symbol expressions (such as change ID prefix) no longer resolve to multiple revisions, and error out if resolved to more than one revisions. Use
change_id(prefix)orbookmarks(exact:name)to query divergent changes or conflicted bookmarks. Commands likejj rebaseno longer requireall:to specify multiple destination revisions. -
jj op abandonnow discards previous versions of a change (or predecessors) if they become unreachable from the operation history. The evolution history is truncated accordingly.Once
jj op abandonandjj util gcare run in a repository, old versions ofjjmight get "commit not found" error onjj evolog. -
commit.working_copies()template method now returnsList<WorkspaceRef> -
The previously predefined
amendalias has been removed. You can restore it by setting the configaliases.amend = ["squash"].
Deprecations
-
The
all:revset modifier andui.always-allow-large-revsetssetting is planned to be removed in a future release. #6016 -
Rename the
core.fsmonitorandcore.watchmansettings tofsmonitor.backend, andfsmonitor.watchmanrespectively.
New features
-
jj workspace listnow accepts-T/--templateoption to customize its output via templates. -
Added
templates.workspace_listtemplate to customize the output ofjj workspace list. -
jj fixnow buffers the standard error stream from subprocesses and emits the output from each all at once. The file name is printed before the output. -
jj statusnow collapses fully untracked directories into one line. It still fully traverses them while snapshotting but they won't clutter up the output with all of their contents. -
Add the
working-copy.eol-conversionconfig which is similar to the gitcore.autocrlfconfig. A heuristics is used to detect if a file is a binary file to prevent the EOL conversion from changing binary files unexpectedly. -
Add a
.parents()method to theOperationtype in the templating language. -
Merge tools config can now explicitly forbid using them as diff editors or diff formatters. Built-in tools that do not function well as diff editing tools or as diff formatters will now report an error when used as such.
-
jj diffeditnow accepts filesets to edit only the specified paths. -
AnnotationLine objects in templates now have a
original_line_number() -> Integermethod. -
Commit templates now support
.files()to list all existing files at that revision. -
Glob patterns now support
{foo,bar}syntax. There may be subtle behavior changes as we use the globset library now. -
The new
bisect(x)revset function can help bisect a range of commits to find when a bug was introduced. -
New
first_parent()andfirst_ancestors()revset functions which are similar toparents()andancestors(), but only traverse the first parent of each commit (similar to Git's--first-parentoption). -
New
signing.backends.ssh.revocation-listconfig for specifying a list of revoked public keys for commit signature verification. -
jj fixcommands now replace$rootwith the workspace's root path. This is useful for tools stored inside the workspace.
Fixed bugs
-
Fixed an error in
jj util gccaused by the empty blob being missing from the Git store. #7062 -
jj op diff -pandjj op log -pnow show content diffs from the first predecessor only. #7090 -
jj git fetchno longer showsNaN%progress when connecting to slow remotes. #7155
Contributors
Thanks to the people who made this release happen!
- adamnemecek (@adamnemecek)
- Alexander Kobjolke (@jakalx)
- Apromixately (@Apromixately)
- Austin Seipp (@thoughtpolice)
- Bryce Berger (@bryceberger)
- Daniel Danner (@dnnr)
- Daniel Luz (@mernen)
- Evan Martin (@evmar)
- George Christou (@gechr)
- George Elliott-Hunter (@george-palmsens)
- Hubert Głuchowski (@afishhh)
- Ilya Grigoriev (@ilyagr)
- Jade Lovelace (@lf-)
- Jake Martin (@jake-m-commits)
- Jan Klass (@Kissaki)
- Joaquín Triñanes (@JoaquinTrinanes)
- Josh Steadmon (@steadmon)
- Kaiyi Li (@06393993)
- Martin von Zweigbergk (@martinvonz)
- Nigthknight (@nigthknight)
- Ori Avtalion (@salty-horse)
- Pablo Brasero (@pablobm)
- Pavan Kumar Sunkara (@pksunkara)
- Philip Metzger (@PhilipMetzger)
- phoebe (@phoreverpheebs)
- Remo Senekowitsch (@senekor)
- Scott Taylor (@scott2000)
- Stephen Jennings (@jennings)
- Theo Buehler (@botovq)
- Tyarel8 (@Tyarel8)
- Yuya Nishihara (@yuja)