Diff and commit
The diff is a full-screen overlay over the board, opened per worktree. It covers the whole loop from reading a change to pushing it, without a terminal.
Opening it
Click the Changes cell on a board row — the one showing files, additions and deletions. On a clean worktree the button is still there, revealed on hover.
↑ and ↓ walk the file list in the order it is displayed, and Esc closes the overlay. Typing in the commit message or a search box keeps the native caret keys.
Two views of the same branch
| Tab | Shows |
|---|---|
| Changes | Your working tree: staged and unstaged, plus untracked files. |
| vs base | Everything this branch has done relative to another branch. |
The base branch for the second tab is a searchable picker over the worktree's branches — the branch you are on is not in the list, since comparing it against itself shows nothing — so you can compare against whatever the branch will actually merge into rather than an assumed default.
Staging and discarding
Three grains, and they do not all offer the same operations:
Everything at once — stage all, unstage all, or discard all.
One file — stage, unstage, or discard that path.
One hunk — the buttons sit beside each hunk of a tracked file's diff, and which ones you get depends on the section it is in. An unstaged hunk offers Stage and Discard. A staged hunk offers Unstage. Discard is the one that exists on a single side: to throw away a change you have already staged, unstage the hunk first and then discard it.
Per-hunk actions apply a patch, so they are exact: staging one hunk of a file leaves the rest of that file unstaged, and the file then appears in both the staged and the unstaged section.
Heads up
Discard is a working-tree deletion, not an undo. Discarding a hunk removes those lines from the file on disk, and nothing in Strado brings them back.
Hunk buttons are for tracked files only. An untracked file has no baseline to diff against, so it stages or discards whole.
Committing
Write the message and commit. Two refusals, both before anything runs: an empty message, and nothing staged. Strado commits exactly what is staged — it does not stage for you.
Push and pull
Both are menus rather than buttons, because the destination is a choice.
Push lists the worktree's remotes and pushes the current HEAD to the one you pick.
Pull lists branches and brings the one you pick into the current branch. A
remote-tracking branch like origin/main pulls from that remote; a local
branch is merged instead, with no editor stop. Pulling onto a detached HEAD is
refused.
Both are given two minutes before they time out, and both report git's own output back to you rather than a summary of it.
The commit graph
The Git tree toggle replaces the file list with the branch's history: one row per commit, with the parent and merge lines drawn as colored lanes beside them.
Selecting a commit shows its author, date, message and changed files, and selecting a file inside it shows that commit's diff for that file. Merge commits are diffed against their first parent, which is what makes the view well-defined for them.
The search box above it searches the full history on the server — message, author, or hash — rather than filtering the commits already on screen.