scm-record
is a Rust library for a UI component to interactively select changes to include in a commit. It's meant to be embedded in source control tooling.
You can think of this as an interactive replacement for git add -p
, or a reimplementation of hg crecord
/hg commit -i
. Given a set of changes made by the user, this component presents them to the user and lets them select which of those changes should be staged for commit.
The scm-record
library is directly integrated into these projects:
- git-branchless: the
git record -i
command lets you interactively select and commit changes. - Jujutsu: as the built-in diff editor; see the
ui.diff-editor
configuration option.
scm-diff-editor
is a standalone executable that uses scm-record
as the front-end. It can be installed via cargo
:
$ cargo install --locked scm-diff-editor
The scm-diff-editor
executable can be used with these tools:
- Git: as a difftool.
- Mercurial: via the
extdiff
extension. - Likely other source control systems as well.
Here are some features in the UI which are not yet implemented:
- Make the keybindings easier to discover, allow accessing the menu with the keyboard.
- Jump to next/previous element of same kind.
- Edit one side of the diff in an editor.
- Multi-way split UI to split a commit into more than 2 commits.
- Support for use as a mergetool.
- Commands to select ours/theirs for diffs representing merge conflicts.
Here's some projects that don't use scm-record
, but could benefit from integration with it (with your contribution):