Appearance
Merge, rebase, cherry-pick
The Integrate button on the Git mode's toolbar brings commits from another branch into the one you are on. A dot on the button means the upstream has commits this branch lacks. It opens a hub that reads the situation first and offers only what fits it.
Everything here composes the result before touching the repository, and writes it once. There is no half-done merge to continue or abort: if you leave, nothing happened.
The hub
Where things stand names the Source, by default this branch's upstream and changeable to any local or remote branch, and counts the Incoming changes, the Local changes and the state of the Worktree. One sentence sums it up: the two are the same commit, one already contains the other, the branch is ahead on a straight line, or the two have diverged.
The source is picked under Integrate from, with the search every list has (Searching lists).
What you can do lists Merge, Rebase and Cherry-pick. A row that does not fit is dimmed, and the sentence above says why. Uncommitted changes to files the integration would touch block it; commit or shelve them first. Conflicted files left over from an earlier integration block everything until resolved.
Merge
The merge screen says what it will do: Fast-forwards main to origin/main when your branch has nothing of its own, or Records a merge commit. Files changed on both sides are listed under Changed on both sides (conflicts); tap one to resolve it. The rest are listed under Only in each branch, and uncommitted work the merge would touch under Uncommitted work in the way. Once every conflict is settled, Merge — or Fast-forward, when that is what it will do — writes the result.
Rebase and cherry-pick
Both replay commits onto your branch, and both go through the same sequence screen. Rebase takes your branch's own commits and replays them onto the source; cherry-pick takes commits you tick from the source and copies them onto your branch. Choose the commits, then Review.
The sequence screen reads down a rail, one step per commit, each ticked to keep. Each step says how it lands: Applies cleanly, Already present — will be dropped, Needs your action below for a conflict, or Waiting on the step above. A step that has passed can be changed from its menu:
- Reword… edits the commit's message and author.
- Set as squash start, then tap the last step of the range, folds those steps into one commit.
- Redo from here… clears the resolutions from that step on and walks it again.
The summary at the top says what the whole thing produces, and warns when the next push will need force. Tap Rebase or Cherry-pick to apply. Leaving the screen discards what was composed; the repository was never touched.
Resolving a conflict
A conflicted file opens the resolution screen. The file is shown as a grid of blocks: each block is one version's take, labelled with the branch it came from, plus Base for what both started from. For each conflicted chunk, choose Use main, Use origin/main or Edit manually. Base is there to read, not to pick.
When a chunk needs more than either side, Create from both sides seeds an edit with both versions, and you write the answer in a small editor. When the whole file needs rewriting, the Resolution actions menu opens the whole file in an editor seeded from the current composition; Use this result takes it. That is a one-way step: the chunk view does not come back.
Files that cannot be merged as text, such as binaries, a file deleted on one side and changed on the other, or a file mode change, are stated plainly and resolved by picking one side whole.
The same screen resolves conflicts for merge, rebase, cherry-pick and the shelf.
Reset
The Reset button on the toolbar rewinds the branch. It asks where to: Reset to a commit of the current branch, choosing from the branch's own history, or Reset to a remote branch, making the branch identical to the remote's tip. Both offer three modes, soft by default:
- Reset HEAD only: the undone changes stay staged.
- Reset HEAD and index: they stay as unstaged edits.
- Reset HEAD, index and worktree: local changes to tracked files are discarded. Untracked files stay.
The screen counts what is uncommitted or discarded, says when the upstream already has the commits so the next push will need force, and confirms before a hard reset overwrites uncommitted work.
Not offered
Squashing onto a branch as one commit, reverting a commit, and "continue" style repair of a merge left on disk are not in the app. An integration either completes or leaves nothing behind.
