Neatbo.

A common ancestor changes the merge decision

Use a common ancestor to distinguish disjoint changes from overlapping edits, then save a complete explicitly resolved text.

A common ancestor changes the merge decision

Two texts can show differences but cannot tell which side changed a line from the common ancestor. The source asks for mine, theirs, ancestor and a fourth output pane. Retaining the ancestor makes disjoint changes mergeable and same changes non-duplicating; overlapping edits still require a visible decision.

Try the complete workflow

Confirm the common ancestor and selected roles. Reduce line work if over budget, then rerun. Keep unresolved output labeled as conflicted until every conflict has an explicit resolution.

A two-source difference cannot identify both edits

If local changes b to L and remote changes d to R from the same ancestor, a three-way merge can retain both edits. A two-way display only shows that local and remote differ; it does not identify their common starting point. The complete starter demonstrates these disjoint changes.

Read changes relative to the ancestor
ChangesMerge consequence
Different non-overlapping regionsBoth edits can be retained
The same change on both sidesThe same edit is not duplicated
Overlapping changesA conflict requires an explicit choice
A complete disjoint-change result
a
L
c
R
e

Choose text; do not assume semantic correctness

Local then remote and remote then local concatenate exact conflict fragments in that order. They do not synthesize code, combine object properties or verify the receiving format. A resolved merge means all conflict decisions were applied, not that the program or configuration is correct.

Empty inputs, an empty custom replacement and a missing terminal newline each carry different meaning. Keep the three source identities, chosen BOM policy and complete report when handing off the saved text.

Use a manual file handoff

The source author also reports trouble invoking a desktop merge tool. This workbench does not repair an invocation or configure a Git mergetool. Export three versions from your existing workflow, import them here, and manually review/import the saved merged text there.

  • Export the ancestor, local and remote versions as separate copies.
  • Verify the roles, then inspect all three sources and the fourth output pane.
  • Resolve overlapping regions and keep unresolved output labeled as conflicted.
  • Save the full text with its report and manually review/import it; Git invocation is outside this workflow.

References

Tools in this category

Expand a tool to see its steps, options and supported formats, then open its workspace.

Merge three versions of a text fileCombine local and remote edits against a common ancestor, inspect conflicts and save the complete chosen text.

Combine local and remote edits against a common ancestor, inspect conflicts and save the complete chosen text.

Steps

  1. Open or paste the common ancestor, local version and remote version in their separate panes.
  2. Click Run to read the active sources within the complete task deadline.
  3. Review the merged output and each conflicting base/local/remote region.
  4. Choose each resolution or edit custom text; changing any source clears stale decisions.
  5. Save merged.txt when resolved, or conflicted.txt while unresolved, plus merge-report.json.
  6. Manually import the reviewed saved result into your original editor or workflow; keep the originals and merge report.

Capabilities and limits

  • Provide base, local and remote independently. Each strict UTF-8 source allows 1 MiB and 4,000 exact line tokens. Base lines × (local lines + remote lines) allows 4,000,000 comparison cells.
  • Fixed node-diff3 3.2.1 Hunt–McIlroy line merge. CRLF, CR, LF and the missing terminal newline remain part of each line token. Open files to preserve original line endings; textarea editing may normalize endings.
  • Identical changes appear once. Unresolved conflicts retain LOCAL/BASE/REMOTE markers and are labeled unresolved; complete resolution downloads merged.txt. Reports and result text together allow 8 MiB.
  • Each conflict supports local, base, remote, local then remote, remote then local, or custom UTF-8 text up to 1 MiB. Compact resolution input allows 8 MiB before cloning; active choices also remain subject to the combined output limit. Unresolved is the default. Choose output BOM from base/local/remote or none; base is the default.
  • Conflict markers use LF. A separator LF is inserted when needed after an unterminated fragment and recorded by UTF-16 offset. No syntax-aware merge or automatic repository changes.
  • Each role uses either its pasted text or exactly one selected UTF-8 file. Empty text and genuine zero-byte files are valid merge sources; an invalid active file never falls back to hidden pasted text. Filename labels allow 512 UTF-8 bytes.
  • One leading BOM is removed and recorded, including pasted input. Invalid UTF-8, unpaired Unicode surrogates are refused. Inputs stay in this browser.
  • A fixed 10-second whole-task deadline or cancellation returns no partial export. Rerun after correcting the input; a fresh Worker starts each job.
  • File selection reads metadata only. The entire fixed 10-second period begins at Run and includes engine loading, input checks, reading, import and merging. Any cancelled or refused request publishes no partial copy or download.
  • Conflict IDs must refer to the current output; nonexistent or inactive IDs and custom text attached to another choice are refused. At most 12,000 IDs can arise from the three 4,000-line roles. Changing any source cancels active work and clears prior decisions and results.
  • The fourth pane is a bounded output preview. Copy retains the entire merged text; merge-report.json retains all blocks, conflicts, provenance and decisions. The complete copy and download both preserve the chosen leading BOM and have identical UTF-8 bytes; exact bytes/SHA-256 are reported.
  • This workbench accepts manually exported sources and produces a file for manual import. It does not invoke a Git CLI/mergetool, change a repository, validate code semantics or automatically mark a conflict resolved. Contents and names stay in bounded memory in this tab.
Open Merge three versions of a text file →