Skip to content

Changes & Commits

Dojo uses an immutable, change-based model inspired by Jujutsu. This is fundamentally different from Git’s staging-area approach.

In Dojo, your working copy is always a commit. Every time you modify a file, the change is automatically recorded. There’s no staging area, no git add.

Terminal window
# Just edit files — they're automatically tracked
echo "hello" > file.txt
dojo status
# Shows: A file.txt (in your working copy commit)
  • A change is identified by a change ID — a stable identifier that survives rewrites
  • A commit is a specific version of a change, identified by a commit ID

When you amend or rebase a change, the change ID stays the same but the commit ID changes. This makes it easy to track changes through history rewrites.

Terminal window
# Describe the current working copy
dojo commit -m "Add feature X"

This does two things:

  1. Sets the description on the current working copy commit
  2. Creates a new empty working copy on top

You can go back and edit any change in your history:

Terminal window
# Edit the parent of your current working copy
dojo edit @-
# Make modifications...
# Go back to your latest change
dojo edit @

Child changes are automatically rebased on top of your edits.

Every operation in Dojo is logged and can be undone:

Terminal window
# View operation history
dojo history ops
# Undo the last operation
dojo rewrite undo