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 of
jjmight 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 to
fsmonitor.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 of
jj 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 git
core.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 the
Operationtype 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)