Review and Next Steps
You've completed the jj to git transition tutorial. Let's review what you've learned.
Core Concepts Recap
1. Working Copy as a Commit
- Your
@commit represents uncommitted changes - No staging area—all changes auto-tracked
jj describenames the commit,jj newfinalizes it
2. Branches as Names
- Branches are stable names for commits
@is your working copy, independent of branchesjj branch create/set/deletefor branch management
3. Change IDs
- Every commit has a stable change ID
- Survives rebases and history edits
- Use for tracking work across time
4. Automatic Descendant Rebasing
- Edit old commits without manual conflict resolution
- All descendants automatically update
- Makes history editing safe and routine
5. First-Class Conflicts
- Conflicts live in commits, not blocking errors
- Continue working with unresolved conflicts
- Resolve when ready, in batches
6. Operation Log
- Every action recorded and reversible
jj op undoto reverse mistakesjj op restorefor time travel
Command Quick Reference
| Task | Git | jj |
|------|-----|----|
| Status | git status | jj status |
| Log | git log | jj log |
| Commit | git add/commit | jj describe/new |
| Branch | git branch | jj branch create |
| Checkout | git checkout | jj checkout |
| Diff | git diff | jj diff |
| Push | git push | jj git push |
| Pull | git pull | jj git fetch + rebase |
| Undo | git reset | jj op undo |
| Edit old | git rebase -i | jj edit |
Common Workflows
Daily development:
jj status
jj describe -m "Work in progress"
# ... more work ...
jj describe -m "Ready for review"
jj new
Bug fix:
jj describe -m "Fix bug"
jj new
jj git push
Experiment:
jj new
# ... experimental changes ...
jj describe -m "Experiment"
jj new
# Doesn't work out
jj op undo
History edit:
jj edit --change abc123
# ... make changes ...
jj describe -m "Updated"
jj new
# Descendants auto-rebased
When to Use jj
Ideal for:
- Teams that rebase frequently
- Complex feature development
- Codebases with long-lived branches
- Developers who fear git's data loss
- Projects with frequent merge conflicts
Less ideal for:
- Teams committed to git-only workflows
- Environments requiring git GUI tools exclusively
- Learning environments where git familiarity is the goal
Gradual Migration
You can adopt jj gradually:
- Week 1: Use jj for local work,
jj git push/pullfor remotes - Week 2: Explore
jj editfor history editing - Week 3: Use revsets for complex queries
- Week 4: Adopt advanced workflows (parallel work, etc.)
Resources
Official docs:
Community:
Related tools:
What You've Learned
You now understand:
- How jj's mental model differs from git
- Creating and managing commits without staging
- Branching and checkout in jj
- Viewing history and diffs
- Remote operations with git compatibility
- Powerful revset queries
- Safe history editing with auto-rebasing
- First-class conflict handling
- Time travel with operation log
- Advanced workflows for power users
Continuing Your Journey
Practice:
- Use jj for your next personal project
- Try editing old commit history
- Experiment with parallel work using change IDs
- Explore revset queries for complex selections
Deep dive:
- Read the full jj documentation
- Explore
jj configfor customization - Try jj's sparse checkout for large repos
- Contribute to the jj project
Share:
- Teach your team about jj
- Write about your experience
- Report bugs or feature requests
- Help others learn jj
Final Thoughts
jj rethinks version control with safety and usability as first principles. The @ commit model, change IDs, and automatic rebasing address git's pain points directly.
You now have the knowledge to use jj effectively. The best way to learn is by doing—start using jj for your daily work and discover the workflow patterns that suit you best.
Keep the cheat sheet handy as you transition. It's normal to refer to it frequently until jj's commands become muscle memory.
Congratulations
You've completed the jj for git users tutorial. Welcome to safer, more intuitive version control.