Conflicts
When a merge, rebase, cherry-pick or revert stops on a conflict, the workbench banner opens the conflict resolver. The resolver works on the files Git marks as unmerged and does not touch resolved files.
The block list
Each conflicted region is shown as one block, with the two sides and the common base:
| Choice | Result |
|---|---|
| Ours | The current branch’s side of the block |
| Theirs | The incoming side |
| Both | Ours followed by theirs |
| Base | The common ancestor’s content, for when both sides are wrong |
The whole block is replaced, so whitespace and line endings around the chosen lines are preserved. You can go block by block, and a bulk action applies one choice to every block in a file when the blocks are uniform.
The resolver refuses to stage a file while conflict markers remain. If Git still reports the file as unmerged but no markers are found, the resolver says so and asks which side to stage instead of guessing.
The whole-file editor
For a conflict that is not really block-shaped — moved code, renamed symbols, a merged function — the whole-file editor writes the final result directly. It is a plain text editor over the working-tree file; saving writes the file, and staging is still a separate step.
Three-way view
The three-way view shows base, ours and theirs side by side with a result pane. This is the fastest way to see which side introduced a change and which side is simply older. Navigation moves between changed regions; the result pane is editable.
Modify/delete conflicts
When one side modified a file and the other deleted it, the resolver offers the two meaningful outcomes: keep the modified content or accept the deletion. Keeping writes the file and stages it; deleting removes it and stages the removal.
Staging and finishing
- Stage a file only when you are satisfied with its content.
- The conflict list shows which files are still unresolved.
- When all files are staged, continue the merge, rebase, cherry-pick or revert from the banner.
- Aborting from the banner writes a recovery snapshot of the working tree before it resets anything.
Rerere
Git’s recorded-resolution cache (rerere) is available from the conflict panel:
- Enable recording so that resolutions are captured for later reuse.
- Reuse a recorded resolution when the same conflict appears again.
- Forget a recorded resolution for a path when the stored answer is wrong.
Rerere is per repository and stores resolutions in .git/rr-cache, exactly as Git does.
AI suggestions
If an ACP agent is configured, the resolver can ask for a per-block suggestion:
- The scope disclosure lists the files and blocks that will be sent.
- The suggestion streams into an editable preview.
- Nothing is written until you press apply.
Suggestions are advisory text, not an automatic merge. Reviewing them is the same work as reviewing a human patch; the agent has no write access to the repository. See ACP agents.