The jj-fzf project has just seen a new release with version 0.25.0. This brings some new features, several smaller improvements, and some important changes to be aware of.
For the uninitiated, jj-fzf is a feature-rich command-line tool that integrates jj and fzf, offering fast commit navigation with previews and very quick commit history manipulation through keybindings.
New Features That Expand Functionality:
Better jj-log Integration: The default revset displayed in the fzf overview now closely mirrors the
jj log
revset. If you’re using thejj-fzf.fzflog-depth
config setting, it will now also include bookmark ancestries up to the specified depth.jj-am.sh Script: A new script in the
contrib/
section that can apply one or more patch files in email format (fromgit-format-patch
) to a jj repository. This is particularly useful for email-based workflows and also works in jj repositories with the native backend.jj-undirty.el Integration: An Elisp helper in the
contrib/
section for Emacs users, which will simply trigger automatic jj repository snapshots once an Emacs buffer has been saved. This can be very useful in combination with the operations log (Ctrl+O
in jj-fzf), which allows you to re-create missing historic commits from old snapshots (viaAlt+J
) that were not explicitly committed.Evolog Browser Dialog: Pressing
Ctrl+T
will now show a new evolution log browser for a specific revision, from which old content diffs of a revision are accessible and historic commits can be injected before the most current revision from here as well (withAlt+J
).
Usability Improvements:
Describe with Content Diff: Describing commits in the editor now shows the related content diff, similar to
git commit --verbose
.Improved JJ Interoperability: The new version now honors the
JJ_EDITOR
precedence andui.editor
settings, as well as theui.default-description
setting if specified.PRIVATE Commit Marker: A specific set of revisions can be marked as private via the
git.private-commits
setting in jj. Commits identified as private are barred from being pushed to a remote. The new jj-fzf release will now display commit flags such asprivate
andimmutable
in the preview and additionally display a🌟
indicator for private commits in the log view.Makefile Improvements: The Makefile has been updated to better support macOS, addressing compatibility issues during installs in previous versions, thanks to Douglas Stephen (@dljsjr).
Backwards Compatibility and Breaking Changes:
Dependency on jj-0.25.0: This release requires jj-0.25.0 or higher; the implementation has been adjusted to cope with newer jj requirements (such as the new
author.email().local()
expression in the templating language).Repository Root as CWD: Upon start, jj-fzf now sets the repository root as the current working directory to avoid issues where the working directory might be removed.
Subshell Behavior Changes: Consequently, the
Alt+Z
keybinding now starts subshells in the repository root directory.Upcoming Keybinding Change: The
Alt+S
keybinding forrestore-file
is not recommended for use yet; a complete reimplementation is in progress and will land in the next release.Deprecated Keybinding: The
Ctrl+V
keybinding forgitk
is now deprecated, having a strict dependency on Gitk and colocated repositories. This is likely to be removed in the future.
Contributors and Community Effort:
A large number of other improvements and bug fixes have also been included, thanks to contributors, community feedback and testing. Highlights are the macOS fixes, better performance for large repositories and commits, and bookmark completions.
For a full list of changes, check the jj-fzf 0.25.0 Release page.
Happy committing and send a comment or reach out on GitHub Discussions if you have any feedback or questions.