Merge & conflicts

A conflicted merge is three steps, and Porcelain gives each one a surface.

1. Notice

Unmerged files appear as a Merge Conflicts group nested inside Changes, the way IntelliJ shows them, so the same file never appears twice. A banner names the branch being merged and offers to continue or abort.

The Commit tool window during a merge. A banner reads Merging fix/pool-leak with continue and abort buttons. Below it, a Changes group contains a nested Merge Conflicts group with a Resolve link, holding a single conflicted file.

2. Triage

Resolve opens the conflict list in its own compact window, showing how each side touched every file. Take one side wholesale with Accept Yours or Accept Theirs, or Merge to work through it.

A compact floating window titled Conflicts. It lists one conflicted file with columns showing that both Yours and Theirs modified it, and buttons for Accept Yours, Accept Theirs and Merge.

3. Resolve

Double-clicking a conflicted file opens the three-way editor in its own window: your side on the left, the working result in the middle, theirs on the right, in IntelliJ's order.

The three-way merge editor. Three syntax-highlighted columns: main on the left marked Yours, the editable Result in the middle, fix/pool-leak on the right marked Theirs. The conflicting region is highlighted in red on both outer columns, with accept and ignore controls in the gutters, and the toolbar reads 1 conflict, 0 resolved.

Porcelain also registers with VS Code's Source Control view, so a conflicted file there offers Open in Porcelain Merge Editor, and conflicts raised by a terminal merge land in the same places.