Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Conflicts

Important

  • You resolve conflicts by editing files.

  • You learn that conflict resolution propagates to descendants.

  • You resolve rebase conflicts through alternative moves like rebasing or abandoning Changes.

  • Finally, you see under the hood how Jujutsu treats conflicts as first-class citizens.

We will spend time on this topic not because it’s tricky, but because conflicts are one of the scariest parts of Git, and I want to put that fear to rest.

We will play with a real repository. Clone it:

jj git clone https://codeberg.org/arialdo/jj-playground-conflicts.git

then track remote branches:

jj bookmark track '*'

Here’s the history tree:

○  y          **feat-2**
○  unv
○  vw       Will conflict: deleted file
○  xw       ←
○  xl       Will conflict: Vim
│ ○  nz       ← **merge-b**
│ │ ○  mv       ← **merge-a**
│ ├─╯
│ ○  vr       Base of merge-a and merge-b **base**
│ ○  r        Rebase here
│ ○  l        No idea why
├─╯
│ ○  no       ← **feat-1**
│ ○  vt
│ ○  s        Will conflict
│ ○  unm
│ ○  vz
├─╯
◆  q    🔒  ← **main**
│
~

We will perform moves producing progressively more challenging conflicts:

  1. A simple merge conflict.
  2. A rebase generating 1 single conflict.
  3. A rebase with multiple conflicts.

Then we’ll explore conflict resolution techniques unavailable in Git.

Ready? Hands on the keyboard!