repo:conflicts:resolve

Resolve one structured conflict.

Reference for flywheel repo:conflicts:resolve.

Record a resolution for one structured conflict in the local repository. The resolution is chosen with --strategy and stored locally; nothing is published. In a graph_membership conflict, one side removed a node from a graph while the other side added or edited a semantic edge that needs it: choose the side named by removal_side to keep the removal and drop only the dependent edge work, or the other side to keep the edge and restore only the containment it needs. Keeping the edge is refused, and the conflict stays open, when a node it needs was purged, tombstoned, or moved to another repository. After resolving every listed conflict, finish the rebase with repo:rebase:continue.

When the pull removed an edge that local commits edited, --strategy local adds the edge back with the same ID and endpoints, its local content, and the local edits and attachments made after it; --strategy remote keeps the edge removed and drops only the local changes that need it. The local choice is refused, and the conflict stays open, when the edge's graph, source, or target node is missing, tombstoned, or purged in the pulled state or has moved to another repository, or when the local commits also remove the edge.

In a tag_holder conflict, both sides gave the same one-only tag to different nodes; its local and remote changes name each side's holder. --strategy local removes the tag from the pulled holder and then replays this checkout's changes to who holds the tag, so the tag ends as this checkout left it: held only by its holder, or by no node if it later removed the tag; --strategy remote keeps the pulled holder and drops those local changes.

Keeping the local side replays the local operations after the pulled ones. A local change the pull already made, such as tombstoning a node the pull tombstoned or removing a containment or tag holder the pull removed, is dropped, and a local tag update or retirement is applied to the pulled definition. local and manual are refused, and the conflict stays open, when the pull changed what the local change needs: a node it purged or moved to another repository, a tag it retired, a tag holder it changed, or a node it already placed in a container. repo:conflicts:list marks such a choice unavailable with the same reason.

A departure conflict comes from a pull that moved a node this checkout changed to another repository. Only --strategy remote applies: it keeps the move and drops this checkout's operations on that node. local and manual are refused with repository_departure_conflict_remote_only and exit 2, and the conflict stays open. The refusal's next step names the remote resolve and repo:recover-departed <target_repository_id> <directory>, which recovers those operations into a new checkout in <directory>, a new folder you choose; both commands carry a shell-quoted --repo path.

Command Group

Local Repository

Summary

Resolve one structured conflict.

Usage

flywheel repo:conflicts:resolve <FLAGS> <conflict_id>

Arguments

ArgumentRequiredChoicesDescription
<conflict_id>YesConflict UUID.

Required flags

FlagValueDefaultChoicesDescription
--strategystringlocal, remote, manualResolution strategy; repo:conflicts:show lists the choices each conflict supports. local or remote keeps that side's change; manual (node field conflicts only) sets the field to the text in --value-file. Keeping the local side drops a local change the pull already made and applies a local tag update or retirement to the pulled definition; local and manual are refused when the pull purged or moved the node, retired the tag, changed the tag holder, or already placed the node in a container, and any choice is refused when a local edit that replay keeps wrote text this checkout no longer stores. For a departure conflict, where the pull moved a node this checkout changed to another repository, only remote applies: it keeps the move and drops this checkout's operations on the node; local or manual is refused with repository_departure_conflict_remote_only, whose next step also names repo:recover-departed, which recovers those operations into a new checkout instead. Any other conflict whose local operations all touch such a moved node, such as a conflict about one of its fields, also takes only remote, because continue drops those operations once the departure is resolved: local or manual is refused with repository_departed_node_conflict_remote_only, whose next step names the remote resolve of that conflict and of its departure conflict, and repo:recover-departed. For an edge the pull removed, local adds the edge back with this checkout's content and later edits, and remote keeps it removed and drops only the local work that needs it. For a graph_membership conflict, the side named by removal_side keeps the removal and drops only the dependent edge work; the other side keeps the edge and restores only the containment it needs, and is refused when a node it needs is purged, tombstoned, or moved to another repository. For a tag_holder conflict, where both sides gave the same one-only tag to different nodes, local removes the tag from the pulled holder and replays this checkout's changes to who holds it, and remote keeps the pulled holder and drops those changes. A choice that decides the last open conflict is also tried: it is refused when replaying the local commits with every recorded choice would fail.

Optional flags

FlagValueDefaultChoicesDescription
--repostringLocal repository filesystem path.
--personalUse the configured personal repository.
--value-filestringManual strategy only: file containing the exact text the field should hold.
--formatFORMATjson, tsv, csv, tableOutput format for command results.
--envPROFILEUse a configured CLI profile for this invocation.
--outPATHWrite output to a file path, or use - for stdout.
--openOpen browser-bound URLs when supported.
--no-retryDisable transient-error retries.
--retry-maxNMaximum transient-error retry attempts.
--waitBlock on async operations until a terminal state is reached.
--wait-timeoutSECONDS600Seconds to wait for --wait before timing out. Defaults to 600.
--allow-selfAllow mutating the currently active credential.
--timeoutSECONDSSet the per-request timeout budget in seconds.
--idempotency-keyKEYReuse an Idempotency-Key so ambiguous write failures can be retried with the same key.
--forceForce safety-gated operations where supported.
--yesSkip confirmation prompts for destructive operations.
--debugPrint structured request debugging with secrets masked.
--verbosePrint verbose progress for long-running operations.
-h, --helpShow this help.

Examples

Keep one side of a conflict.

flywheel repo:conflicts:resolve <conflict_id> --repo <path> --strategy <local|remote> --format=json

Keep the removal in a graph_membership conflict: pass its removal_side from repo:conflicts:show.

flywheel repo:conflicts:resolve <conflict_id> --repo <path> --strategy <removal_side> --format=json