Skip to content

FR: in the evolog, add a way to view interdiff between successive operations #464

@gcr

Description

@gcr

Is your feature request related to a problem? Please describe.

I'm always frustrated when viewing long evologs because each operation has identical-looking patches at first glance, especially if successive operations don't change much. I'd prefer to see the changes introduced by each successive operation (interdiff)

This can be done on the command line as follows:

$ jj evolog -r q
◆  qyrktxsx kimmy@kjwilber.org 2026-01-12 12:27:01 main* d6ebfdf0
│  Runner() is now a singleton, so multiple modules can say kg.Runner() without concern
│  -- operation 57ffff602562 describe commit 49c643bfa78991febfb759eff46a32616e7cc508
○  qyrktxsx hidden kimmy@kjwilber.org 2026-01-12 12:26:52 49c643bf
│  Runner() now a singleton, so multiple modules can say kg.Runner()
│  -- operation 292c282b7b95 describe commit edcd8ba22891d34428432de3caa48914aac3d4c1
...

$ jj diff --from edcd8 --to 49c64

The commandline also has jj evolog -p, which shows each entry as successive interdiff patches, doing exactly what I need.

Jjui already has a p binding which opens each entry in the preview view for easy scrolling, but it always compares that operation against its parent.

Describe the solution you'd like

The evolog has d for diff, but it always displays that entire change's diff as it existed at that operation. Instead, I'd like a way to diff between either two selected or successive operations to view the changes that each operation introduced. This is helpful for seeing which snapshots contain which changes.

I'm proposing two changes:

  • In the evolog, make the p binding show interdiff (changes introduced by each operation), just like how jj evolog -p does it.
  • Add a new keybinding like D that opens the diff view but --from is set to the operation's parent

Describe alternatives you've considered

I tend to use jjui to browse the evolog and copy the commit IDs to a jj diff commandline. Alternatively, browsing the evolog with jj evolog -p shows interdiff patches by default.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions