Reviewed merges and conflicts
Development reference · View source
In the branch list (Space g b), Tab m reviews merging the selected local
or cached remote branch into the current branch. Cached remote tips reflect
the last fetch; merge review does not contact the remote. The native overlay
names both branches and captured commit IDs, lists proposed file changes, and
predicts already up to date, fast-forward, clean pending merge, or conflicts.
Already-contained requests still open the review with approval disabled.
Cancel is selected initially. Up/Down visit file rows and footer actions;
Left/Right choose a footer action. Enter inspects a file or activates the
selected action. a/A approves and c/C cancels at the root. Escape,
Ctrl-c, and the configured leader cancel. The footer remains visible in
narrow terminals. Details contain the proposed patch or labelled Base,
Current, Other, and provisional Result where available. Back returns to the
same root selection and scroll; approval shortcuts are inactive in details.
Long details and overviews remain scrollable with explicit continuation.
Live terminal sessions require typing the exact destination branch before approval. While that input has focus, letters are text. Unsaved repository files, concurrent file/index/ref changes, stale previews, unsupported custom merge drivers or filters, unrelated histories, and unsupported Git versions are refused. A stale review must be opened again.
Approval applies the reviewed merge with no autostash and no automatic merge commit. A fast-forward has no pending merge to continue or abort. A successful non-fast-forward merge remains pending even if clean or textually unchanged; creating its commit always requires a separate reviewed Continue and explicit message save. Actual index conflicts replace the simulated conflict inventory.
Space g c / :git-conflicts opens [git conflicts], a read-only list from
unmerged index stages. It supports merges started in Runyte or with the CLI.
The header identifies the active operation and sides; empty state distinguishes
“No conflicts” from “Merge ready to commit.” Enter opens the ordinary working
file at its first recognized region. Editing, language tools, undo/redo, save,
search, copying, and splits keep their ordinary meanings.
| Conflict action | Default key |
|---|---|
| Next / previous unresolved region, then file | Tab n / Tab p |
| Keep Current / take Other for one region | Tab o / Tab t |
| Inspect index sides | Tab d |
| Review staging the saved complete file or deletion | Tab r |
| Explicit review allowing intentional literal marker text | Tab R |
| Return to the conflict list | Tab l |
| Review the complete Current / Other side, including deletion | Tab O / Tab T |
The conflict list also offers sides, staging, and complete-side actions, so
absent working paths remain manageable. Region choices are one undoable text
transaction and preserve edits outside the region. Standard, diff3, and
zdiff3 markers use the path’s configured marker width; malformed marker blocks
are refused. Saving changes the working file without resolving its index
stages. Tab r reviews and stages that exact saved file or deletion; remaining
markers require the explicit Tab R override. Undo after staging makes the
working file dirty without undoing the staged resolution.
Binary content is labelled. Related paths for structural conflicts are shown with an explanation; review each manually saved file or deletion. Unsafe whole side choices for structural groups and submodules are disabled. In a rebase, cherry-pick, or other non-merge operation, inspection uses stage identities; Runyte stages supported file resolutions but continuation/abort use Git.
In the conflict list, Tab c continues and Tab A aborts. Git status offers
Tab C and Tab A; ordinary Commit routes an active merge through its reviewed
Continue workflow too. Continue refreshes operation state and the index and
requires all index conflicts resolved. Its approval opens the seeded merge
message; only saving that exact buffer creates the commit. A rejected hook
retains the message and review authority for retry while its captured state
remains valid. Cancelling message editing leaves the merge pending.
Abort is a separate review with Cancel selected. It explains that resolution work and post-merge edits can be discarded; unsaved repository buffers must be saved first. Closing a conflict file or list never aborts a merge. Git versions without the required simulated-merge capability refuse preview safely.