Resolve conflicts in jujutsu workspaces without blocking your workflow.
After running spec-kitty sync, you see a message about conflicts:
✓ Synced successfully
Rebased 2 commits onto new upstream
⚠ 1 file has conflicts (resolve when ready)
With jj, this is not a blocker. You can continue working.
Note: This guide is jj-specific. For git conflict resolution, see your git documentation or use
git mergetool.
Unlike git, jj treats conflicts as data, not errors:
| Aspect | git | jj |
|---|---|---|
| Sync with conflicts | Fails | Succeeds |
| Working state | Blocked | Continues |
| When to resolve | Immediately | When convenient |
| Other work | Cannot proceed | Can proceed |
This is transformative for multi-agent development where multiple agents work in parallel.
With jj, you can keep working on other parts of your code while conflicts exist:
# Edit unaffected files
# Run tests that don't depend on conflicted code
# Commit new changes
Conflicts will wait until you’re ready to resolve them.
See which files have conflicts:
jj status
Output:
Working copy changes:
C src/models/user.py (conflict)
M src/api/endpoints.py
The C indicates a conflict.
Open the conflicting file. You’ll see markers like:
class User:
<<<<<<< Conflict 1 of 1
%%%%%%% Changes from base to side #1
- avatar_url: str
+ avatar_url: Optional[str]
+++++++ Contents of side #2
avatar_url: str
avatar_size: int
>>>>>>>
This shows:
Edit the file to contain the correct final code:
class User:
avatar_url: Optional[str]
avatar_size: int
Remove all conflict markers (<<<<<<<, =======, >>>>>>>).
After editing, squash the resolution into your commit:
jj squash
Or create a new commit with the resolution:
jj commit -m "Resolve merge conflict in user model"
Confirm no conflicts remain:
jj status
Output should show no C markers:
Working copy changes:
M src/models/user.py
M src/api/endpoints.py
jj’s conflict markers are more detailed than git’s:
<<<<<<< Conflict N of M
%%%%%%% Changes from base to side #1
-original line
+modified line from side 1
+++++++ Contents of side #2
line from side 2
>>>>>>>
%%%%%%%: Shows what changed between the base and side #1+++++++: Shows the full content from side #2- and + within %%%%%%% show line-by-line changesSee when conflicts were introduced:
spec-kitty ops log --verbose
Operation Log
─────────────────────────────────────────────────
abc123 rebase 2 minutes ago ⚠ conflicts in src/models/user.py
def456 edit 5 minutes ago Clean
If the conflict is too complex, undo the operation that caused it:
spec-kitty ops undo
This restores your workspace to before the sync. Then you can:
This error means jj detected unresolved conflict markers in your files. Check:
jj status
And look for files marked with C. Resolve them first.
Make sure you removed ALL conflict markers:
grep -r "<<<<<<" .
grep -r ">>>>>>>" .
If you accidentally deleted your changes while resolving, use the operation log:
spec-kitty ops log
spec-kitty ops restore <operation-id-before-resolve>
In multi-agent development:
This keeps all agents productive and reduces coordination overhead.