User guide / Git

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 actionDefault key
Next / previous unresolved region, then fileTab n / Tab p
Keep Current / take Other for one regionTab o / Tab t
Inspect index sidesTab d
Review staging the saved complete file or deletionTab r
Explicit review allowing intentional literal marker textTab R
Return to the conflict listTab l
Review the complete Current / Other side, including deletionTab 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.