3.4 KiB
Time Travel: Viewing Past States
This document covers how to explore the repository at past operations without modifying your current state.
The --at-op Flag
Purpose: View the repository as it was at any past operation without changing current state.
Key concept: This is read-only time travel. You're peeking at history, not modifying anything.
Works with Read-Only Commands
The --at-op flag can be used with any read-only jj command:
jj log --at-op=<op-id> # See commit history at that operation
jj status --at-op=<op-id> # See working copy state
jj diff --at-op=<op-id> # See changes at that time
jj show --at-op=<op-id> # See specific commit at that time
Important: Working copy is NOT modified. You're just viewing how things were.
Basic Exploration Workflow
1. Find Operation of Interest
jj op log # Browse operation history
2. View Repo State at That Operation
jj log --at-op=abc123def456
3. Compare with Current State
jj log # Current state
jj log --at-op=abc123 # Past state
4. See What Changed in Working Copy
jj diff --at-op=abc123
Exploring to Find Right Restore Point
Problem: You know something went wrong, but not sure which operation to restore to.
Solution: Use --at-op to explore without committing:
# 1. Start with operation log
jj op log
# 2. Use --at-op to peek at different states
jj log --at-op=abc123 # Is this the right state?
jj status --at-op=abc123 # Check working copy
jj diff --at-op=abc123 # See changes
# 3. Try different operations until you find the right one
jj log --at-op=def456 # Or this one?
jj log --at-op=ghi789 # Found it!
# 4. When you find it, restore (see restoring-operations.md)
jj op restore ghi789 # Now actually restore
Time Travel Patterns
"Find When Things Broke"
jj op log # Browse operations
# Bisect through time with --at-op
jj log --at-op=<candidate>
jj log --at-op=<earlier>
jj log --at-op=<evenEarlier>
# Find last good state, then restore to it
"Compare Now vs Then"
# View current state
jj log
jj status
# View past state
jj log --at-op=abc123
jj status --at-op=abc123
# Compare
jj op diff --from abc123 --to @
"See Commit History Evolution"
# How did the log look after each operation?
jj log --at-op=abc123 # After operation 1
jj log --at-op=def456 # After operation 2
jj log --at-op=ghi789 # After operation 3
Advantages of Time Travel
Safe exploration:
- ✅ No risk of breaking current state
- ✅ Try multiple candidates before committing
- ✅ Understand what changed between operations
- ✅ Make informed decisions about restoring
When to use:
- Not sure which operation to restore to
- Want to understand history before taking action
- Debugging complex repository states
- Learning how operations affected the repository
Important Notes
Automatic snapshotting is disabled: When using --at-op, jj doesn't snapshot the working copy before the command.
Read-only only: You cannot modify the repository while viewing at a past operation. Use jj op restore for that (see restoring-operations.md).
No working copy modification: Your files on disk don't change. You're viewing metadata about how the repo was structured at that point.