Back to compare picker

Merge conflict resolver vs Conflict resolution vs Conflict state vs Review before submit

A merge conflict resolver is a source-control-specific resolver for branch, file, and hunk conflicts. Conflict resolution is the broader decision workflow for competing values, conflict state exposes that competing versions exist, and review before submit verifies a user's own captured answers before a transaction.

Learn the decision

Match the interaction to the person's task

A merge conflict resolver is a source-control-specific resolver for branch, file, and hunk conflicts. Conflict resolution is the broader decision workflow for competing values, conflict state exposes that competing versions exist, and review before submit verifies a user's own captured answers before a transaction.

Merge conflict resolver

Use it when: A pull request, merge request, rebase, merge, or branch update has source-code conflicts that require developer decisions.

Make this state clear: Repository and branch context state with target branch, source branch, and merge request or pull request identifier.

Observe the result: A developer opens a merge request conflict, chooses target for the dependency version, edits the feature flag block to keep both checks, reviews the resolved file, enters a commit message, and commits after validation passes.

Study the full pattern →

Conflict resolution

Use it when: A conflict has been detected and a user must choose, merge, save-copy, skip, or commit a result.

Make this state clear: Conflict list state with unresolved count and current conflict position.

Observe the result: A user resolves the supervisor comment by merging both versions, keeps the server contact number, saves the local safety note as a copy, reviews the final report, then commits with an audit summary.

Study the full pattern →

Conflict state

Use it when: Concurrent users, devices, branches, or background jobs changed the same object or location.

Make this state clear: Conflict detected state naming affected object and source versions.

Observe the result: A user tries to sync an offline field report, reviews only the two changed fields, merges one comment, keeps the server contact number, and commits a resolved version.

Study the full pattern →

Review before submit

Use it when: A user has provided multiple answers and should verify them before a consequential submit action.

Make this state clear: Initial review state with grouped captured answers, relevant sections, and explicit submit action.

Observe the result: A user changes their phone number from review, lands on the phone page with the old value pre-filled, saves, and returns directly to review with other answers preserved.

Study the full pattern →

Practice the judgment: Imagine this situation: A general conflict resolver is reused for code and omits branch labels, file paths, hunk numbers, and conflict marker validation. Write the person's goal, choose one of these patterns, and show the state that helps the person continue. Use the decision rules and source trail below to explain your choice.

Review the underlying principle →

Decision dimensions

Dimension Merge conflict resolverConflict resolutionConflict stateReview before submit
UI or UX UI + UX - Source-code branch conflict resolver with file and hunk decisionsUI + UX - Guided workflow for reviewing and committing conflict decisionsUI + UX - Competing-version resolution stateUI + UX - Final editable answer summary before committing a transaction
UI guidance Show the merge target, source branch, base branch, file path, conflict count, and current hunk before any Use ours, Use theirs, or Edit resolution action.Show a durable resolution workspace that lists every unresolved conflict, exposes the current conflict, names each version source, and separates choose-local, choose-remote, merge, save-copy, skip, and commit actions.Show both competing versions near the affected object, field, paragraph, file, row, or branch with source labels such as Your edit, Server version, Mina's edit, Target branch, and Current published value.Render a single review page immediately before commit with a clear title, grouped answer sections, readable key/value rows, per-answer or per-section Change actions, skipped optional answers when meaningful, and a primary button whose label names the committed action.
UX guidance Guide developers through file and hunk decisions, preserve both branch versions until commit, validate the resolved file for remaining markers, and route unsupported or risky files to local/manual resolution instead of pretending the browser can solve them.Use conflict resolution after conflict detection when users must make one or more explicit decisions before a record, document, branch, import, or synced object can continue.Preserve each version, explain why automatic merge was unsafe, guide users through the smallest conflicting unit, and make the post-resolution result reviewable before committing.Use review before submit to give users one final chance to verify and correct captured answers before a transaction is sent, paid, published, applied, or otherwise committed.
Good UI A merge request resolver shows Target main and Source feature/billing beside src/billing/rules.ts, lists 2 unresolved hunks, labels Use target and Use source controls, previews the resolved file, and keeps Commit resolution disabled until all conflict markers are gone.A field report resolver shows 2 of 3 conflicts remaining, displays Your offline value and Mina's server value for the current field, offers Keep local, Keep server, Merge both, Save copy, and shows a reviewed result before Commit resolutions.A field report says Conflict on supervisor comment, shows Your offline edit from 11:06 beside Server edit by Mina at 11:07, and offers Keep mine, Keep server, and Merge comment.A claim review page has Applicant, Contact details, Evidence, and Declaration sections; each row shows the captured answer and a Change link with hidden context such as Change email address.
Bad UI A resolver lets users commit while <<<<<<< markers remain in the file.A resolver lets users click Commit while some conflicts are still unresolved and hides which side will be lost.A save banner says Something went wrong and only offers Retry after another user changed the same field.Change links lack context, so assistive technology users hear a list of identical Change links.
Good UX A developer opens a merge request conflict, chooses target for the dependency version, edits the feature flag block to keep both checks, reviews the resolved file, enters a commit message, and commits after validation passes.A user resolves the supervisor comment by merging both versions, keeps the server contact number, saves the local safety note as a copy, reviews the final report, then commits with an audit summary.A user tries to sync an offline field report, reviews only the two changed fields, merges one comment, keeps the server contact number, and commits a resolved version.A user changes their phone number from review, lands on the phone page with the old value pre-filled, saves, and returns directly to review with other answers preserved.
Bad UX A browser resolver removes conflict markers but produces syntax-invalid code and still enables Commit.The system silently resolves all conflicts by newest timestamp and only shows a success toast.The app silently keeps the newest server value and deletes the user's local note.A user selects Change address, edits one field, then has to repeat every later page before finding the review page again.
Best fit A pull request, merge request, rebase, merge, or branch update has source-code conflicts that require developer decisions.A conflict has been detected and a user must choose, merge, save-copy, skip, or commit a result.Concurrent users, devices, branches, or background jobs changed the same object or location.A user has provided multiple answers and should verify them before a consequential submit action.
Avoid when The UI only needs to announce that a merge conflict exists and link to a resolver.The interface only needs to signal that a conflict exists and route users elsewhere.The user is managing an unpublished draft lifecycle rather than resolving competing edits.The task is a single low-risk field with clear inline validation and an obvious submit action.
Required state Repository and branch context state with target branch, source branch, and merge request or pull request identifier.Conflict list state with unresolved count and current conflict position.Conflict detected state naming affected object and source versions.Initial review state with grouped captured answers, relevant sections, and explicit submit action.
Accessibility burden Use headings for repository, file, and hunk sections so keyboard and screen reader users can navigate conflict scope.Place resolution controls after the compared values they affect and label them with the source they keep or discard.Associate each conflict message with the affected field, row, line, paragraph, or file.Use headings that make the review task explicit, such as Check your answers before sending your application.
Common misuse Leaving Ours and Theirs undefined in a browser context where repository roles can invert by operation.Marking conflicts resolved before the user reviews the surviving value.Treating a conflict as a simple retryable save error.Labelling the final commit button Continue.

Merge conflict resolver

UI or UX
UI + UX - Source-code branch conflict resolver with file and hunk decisions
UI guidance
Show the merge target, source branch, base branch, file path, conflict count, and current hunk before any Use ours, Use theirs, or Edit resolution action.
UX guidance
Guide developers through file and hunk decisions, preserve both branch versions until commit, validate the resolved file for remaining markers, and route unsupported or risky files to local/manual resolution instead of pretending the browser can solve them.
Good UI
A merge request resolver shows Target main and Source feature/billing beside src/billing/rules.ts, lists 2 unresolved hunks, labels Use target and Use source controls, previews the resolved file, and keeps Commit resolution disabled until all conflict markers are gone.
Bad UI
A resolver lets users commit while <<<<<<< markers remain in the file.
Good UX
A developer opens a merge request conflict, chooses target for the dependency version, edits the feature flag block to keep both checks, reviews the resolved file, enters a commit message, and commits after validation passes.
Bad UX
A browser resolver removes conflict markers but produces syntax-invalid code and still enables Commit.
Best fit
A pull request, merge request, rebase, merge, or branch update has source-code conflicts that require developer decisions.
Avoid when
The UI only needs to announce that a merge conflict exists and link to a resolver.
Required state
Repository and branch context state with target branch, source branch, and merge request or pull request identifier.
Accessibility burden
Use headings for repository, file, and hunk sections so keyboard and screen reader users can navigate conflict scope.
Common misuse
Leaving Ours and Theirs undefined in a browser context where repository roles can invert by operation.

Conflict resolution

UI or UX
UI + UX - Guided workflow for reviewing and committing conflict decisions
UI guidance
Show a durable resolution workspace that lists every unresolved conflict, exposes the current conflict, names each version source, and separates choose-local, choose-remote, merge, save-copy, skip, and commit actions.
UX guidance
Use conflict resolution after conflict detection when users must make one or more explicit decisions before a record, document, branch, import, or synced object can continue.
Good UI
A field report resolver shows 2 of 3 conflicts remaining, displays Your offline value and Mina's server value for the current field, offers Keep local, Keep server, Merge both, Save copy, and shows a reviewed result before Commit resolutions.
Bad UI
A resolver lets users click Commit while some conflicts are still unresolved and hides which side will be lost.
Good UX
A user resolves the supervisor comment by merging both versions, keeps the server contact number, saves the local safety note as a copy, reviews the final report, then commits with an audit summary.
Bad UX
The system silently resolves all conflicts by newest timestamp and only shows a success toast.
Best fit
A conflict has been detected and a user must choose, merge, save-copy, skip, or commit a result.
Avoid when
The interface only needs to signal that a conflict exists and route users elsewhere.
Required state
Conflict list state with unresolved count and current conflict position.
Accessibility burden
Place resolution controls after the compared values they affect and label them with the source they keep or discard.
Common misuse
Marking conflicts resolved before the user reviews the surviving value.

Conflict state

UI or UX
UI + UX - Competing-version resolution state
UI guidance
Show both competing versions near the affected object, field, paragraph, file, row, or branch with source labels such as Your edit, Server version, Mina's edit, Target branch, and Current published value.
UX guidance
Preserve each version, explain why automatic merge was unsafe, guide users through the smallest conflicting unit, and make the post-resolution result reviewable before committing.
Good UI
A field report says Conflict on supervisor comment, shows Your offline edit from 11:06 beside Server edit by Mina at 11:07, and offers Keep mine, Keep server, and Merge comment.
Bad UI
A save banner says Something went wrong and only offers Retry after another user changed the same field.
Good UX
A user tries to sync an offline field report, reviews only the two changed fields, merges one comment, keeps the server contact number, and commits a resolved version.
Bad UX
The app silently keeps the newest server value and deletes the user's local note.
Best fit
Concurrent users, devices, branches, or background jobs changed the same object or location.
Avoid when
The user is managing an unpublished draft lifecycle rather than resolving competing edits.
Required state
Conflict detected state naming affected object and source versions.
Accessibility burden
Associate each conflict message with the affected field, row, line, paragraph, or file.
Common misuse
Treating a conflict as a simple retryable save error.

Review before submit

UI or UX
UI + UX - Final editable answer summary before committing a transaction
UI guidance
Render a single review page immediately before commit with a clear title, grouped answer sections, readable key/value rows, per-answer or per-section Change actions, skipped optional answers when meaningful, and a primary button whose label names the committed action.
UX guidance
Use review before submit to give users one final chance to verify and correct captured answers before a transaction is sent, paid, published, applied, or otherwise committed.
Good UI
A claim review page has Applicant, Contact details, Evidence, and Declaration sections; each row shows the captured answer and a Change link with hidden context such as Change email address.
Bad UI
Change links lack context, so assistive technology users hear a list of identical Change links.
Good UX
A user changes their phone number from review, lands on the phone page with the old value pre-filled, saves, and returns directly to review with other answers preserved.
Bad UX
A user selects Change address, edits one field, then has to repeat every later page before finding the review page again.
Best fit
A user has provided multiple answers and should verify them before a consequential submit action.
Avoid when
The task is a single low-risk field with clear inline validation and an obvious submit action.
Required state
Initial review state with grouped captured answers, relevant sections, and explicit submit action.
Accessibility burden
Use headings that make the review task explicit, such as Check your answers before sending your application.
Common misuse
Labelling the final commit button Continue.
Decision rules
  • Use merge conflict resolver when the competing values are source-code branches, files, hunks, conflict markers, and a resolution commit in a repository.
  • Use conflict resolution when users must decide what survives across records, documents, imports, or synchronized objects without source-control hunk and branch semantics.
  • Use conflict state when the main UI job is to expose that competing valid versions exist, preserve both values, and route users to the proper resolver.
  • Use review before submit when users are checking their own captured answers before sending, paying, publishing, or applying a transaction and no external branch or collaborator version competes.
  • A merge conflict resolver must name target and source branches, file paths, hunk numbers, code context, and commit scope; a general conflict resolver can use field, row, document, or object labels instead.
  • A merge conflict resolver must validate that conflict markers and unsupported files are resolved before enabling commit; a conflict state may only show the unresolved badge and affected object.
  • Review before submit can offer Change links for user-entered values, but it should not present Use ours, Use theirs, branch labels, or repository commit messages.
  • Conflict resolution can include final reviewed summaries, but merge conflict resolver summaries must include files changed, remaining hunks, branch pair, and resolution commit message.
  • Do not use bulk Accept all incoming for merge conflicts unless the UI shows affected files, branch meaning, discarded code, and a reviewable commit result.
  • Do not clear merge conflict status until the repository accepts the resolution commit and refreshes mergeability.
Inspect live examples
Failure modes
  • A general conflict resolver is reused for code and omits branch labels, file paths, hunk numbers, and conflict marker validation.
  • A conflict state opens a merge page that only says conflicts exist and offers no per-hunk decisions.
  • A review-before-submit page asks developers to check a merge result but hides source and target branch code.
  • A merge conflict resolver enables Commit while <<<<<<< markers, unsupported files, or moved-target errors remain.
  • A bulk incoming choice discards target-branch code across many files without a changed-file summary.
  • The UI clears conflict status after a browser edit even though the repository rejects the resolution commit.

Saved items