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

Resolving Conflicts

When a loom operation rewrites history and two commits touch the same lines, git can’t merge them automatically. Instead of aborting, loom pauses the operation and lets you fix the conflict before continuing.

What a Paused Operation Looks Like

$ git loom commit -b feature-auth -m "add auth middleware" zz
✓ Created branch `feature-auth` at `a1b2c3d`
! Conflicts detected — resolve them with git, then run:
  loom continue   to complete the commit
  loom abort      to cancel and restore original state

The process exits with code 0. Your work is safe — loom saved the operation state to .git/loom/state.json and left the rebase paused at the conflicting commit.

Step 1: Find the Conflicts

$ git status
You are currently rebasing branch 'integration' on 'a1b2c3d'.
  (fix conflicts and then run "git rebase --continue")

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   src/middleware.rs

The conflicting files are listed under Unmerged paths. You can also run git diff to see the conflict markers inline.

Step 2: Resolve Each File

Open each conflicting file in your editor. Git inserts conflict markers to show both versions:

<<<<<<< HEAD
// existing middleware code
=======
// your new auth middleware
>>>>>>> feature-auth

Edit the file to keep what you want — either one side, the other, or a combination of both — and remove the <<<<<<<, =======, and >>>>>>> markers entirely.

Tip

Most editors have built-in conflict resolution UI. In VS Code, click Accept Current, Accept Incoming, or Accept Both above each conflict block. For a dedicated mergetool, run git mergetool. See the git documentation on resolving conflicts for more detail.

Step 3: Mark Files as Resolved

Once a file is clean (no more conflict markers), stage it:

$ git add src/middleware.rs

For a file that should be deleted entirely as the resolution, use:

$ git rm src/middleware.rs

Repeat for every conflicting file. When git status shows no more unmerged paths, you’re ready to continue.

Step 4: Continue or Abort

To finish the operation:

$ git loom continue
✓ Created commit `b2c3d4e` on branch `feature-auth`

Loom runs git rebase --continue internally, completes the interrupted command’s post-rebase work (restoring staged patches, printing the success message), and removes the saved state.

To cancel and go back to where you started:

$ git loom abort
✓ Aborted `loom commit` and restored original state

Abort rolls back all branch refs, removes any branches created during the operation, and restores any staged changes that were saved aside. For commit, the content you were committing comes back as unstaged working-tree changes so nothing is lost.

Multiple Conflicts

If your branch has several commits that conflict, each loom continue may pause again at the next one. Repeat the resolve → git addloom continue cycle until the operation completes:

$ git loom update
! Conflicts detected...

$ git add src/api.rs && git loom continue
! Conflicts remain — resolve them and run `loom continue` again

$ git add src/models.rs && git loom continue
✓ Updated branch `integration` with `origin/main` (abc1234 Latest commit)

If You Accidentally Run git rebase --continue

That’s fine. Loom detects that the rebase is no longer active and skips straight to the post-rebase work when you run loom continue.

If the State File is Stale

If loom blocks you with a “paused operation” error but you know no operation is actually in progress (e.g., after a crash or force-reset), delete the state file to reset:

rm .git/loom/state.json

Warning

Only do this if you are certain no loom operation is paused. If a rebase is still in progress, run loom abort instead — that also aborts the rebase and restores your branch refs.

See Also