Guide contents

Commits & History

Strand gives you three lenses on history: the All Commits graph for reachable history, the Reflog for everywhere HEAD has been (including orphaned commits), and a per-file view with follow-renames history, revision compare, and blame.

All Commits (Mod+3)#

The All Commits view renders the full commit graph as a virtualized table: an SVG lane graph on the left, then message, author, date, and short hash columns. Each branch gets its own colored lane; merge commits are marked with a ⊕ next to the message. Row height follows the density setting (compact / default / relaxed) from Settings.

Rows are decorated with chips:

Commit detail panel#

Selecting a commit (click or Enter) opens a detail panel on the right with the full message, a metadata grid, the list of changed files, and the diff of the focused file. The metadata includes a lazy GPG, SSH, or X.509 signature check: verified signatures show the signer, while bad, expired, revoked, untrusted, unavailable, and unsigned states stay distinct. Hover the signature for key, fingerprint, and trust details. Verification runs only for the opened immutable commit, never across the paged graph.

The panel can copy the subject or body separately and export the exact commit as an mbox-compatible .patch. It also re-roots the sidebar's Files tab to that commit; the short hash above the tree makes the historical context explicit. Historical trees are read-only, and opening a file keeps Content and Preview pinned to that revision. Image changes render as before/after previews. Drag the divider to resize the panel; the split is remembered. Press Escape to close it and return Files to the working tree.

Keyboard#

Key Action
/ Move focus through the graph
Shift+↑ / Shift+↓ Extend the multi-selection
Mod+A Select all loaded commits
Enter Open the focused commit in the detail panel
Escape Close the detail panel, then clear the multi-selection
Shift+F10 / Menu key Open the context menu for the focused row
/ Focus the search field

Selecting two commits adds Compare to the graph toolbar. The dialog orders them from older to newer, lists the changed files, and renders the selected text or image diff. Any multi-selection also adds Cherry-pick selected and Export patches…; Strand applies or exports the commits oldest-to-newest so dependent commits keep their original order. The keyboard-openable row menu for a selected set can copy full SHAs, subjects, or complete messages. Patch export writes one mbox-compatible series through the native save dialog. Selections containing a merge commit must be cherry-picked individually so you can choose its mainline parent; copy and patch export still work for them.

Context menu#

Right-click a commit (or use Shift+F10) for:

Searching the graph (/)#

Press / (or run "Search commits…" from the command palette) to focus the search field in the toolbar. A mode button in front of the field picks what you search:

Message, author, and hash matches highlight in place over the loaded graph; a counter shows your position and Enter / Shift+Enter step through matches. The graph loads a window of recent history — in Message and Author mode, press Mod+Enter (or the history button) to run a full-history search on the backend; results open in a dropdown you can navigate with the arrow keys. Hash search stays within the loaded window. Content mode always searches the backend, so a plain Enter runs it there. Escape clears the search.

Activity timeline#

A vertical rail on the right edge of the graph is a commit-density histogram over time: each bar is an equal time bucket, and bar length encodes how many commits landed in that span — bursts read as long bars, quiet stretches as gaps. Date gridlines label the axis (newest at the top), a translucent band marks the currently visible window, and hovering shows the bucket's date range and commit count. Click or drag the rail to scrub the graph to that point in time. A toolbar button toggles the rail; it's a pointer affordance like a minimap — everything it reaches is also reachable by arrow keys and search.

Reflog (Mod+3)#

The Reflog view is the local, chronological record of where HEAD has pointed — every commit, checkout, reset, rebase, merge, and pull. A segmented Graph | Reflog toggle in the toolbar flips between the two history lenses.

Unlike the graph, the reflog includes commits orphaned by a reset, rebase, or amend, so it's your recovery path back to "lost" work. Each row shows the HEAD@{n} selector, the operation (destructive ops like reset and rebase are color-flagged), the message, time, and target hash.

To recover a commit you lost to a bad reset: open the Reflog, find the entry from before the reset, and either Create branch here… to keep it or Reset HEAD here… to move your branch back. If the commit is orphaned it won't appear in the graph, but the context menu actions work on it directly.

Work file documents#

Open any file from the sidebar's Files tab or the command palette to get a document in Work with up to five modes:

Tab What it shows
Content The editable, syntax-highlighted working-tree file, or a read-only selected-commit version; images get a checkerboard preview
Preview Rendered form of the working-tree or selected-commit file (only for previewable files)
History The file's commit history, following renames (git log --follow)
Compare This file diffed between any two of its revisions
Blame Per-line authorship

Press Mod+F anywhere in the file view to switch to Content and search the file's source. Enter / Shift+Enter (or Down / Up) move through matches with wrapping; Esc closes the search.

For an existing UTF-8 working-tree file, type directly in Content. Changes remain unsaved until you use the save icon or Mod+S. Historical revisions, binaries, oversized files, and non-UTF-8 text stay read-only; stale saves are refused when another tool changed the disk content after Strand opened it.

Preview#

Markdown renders as a document — including repo-relative images and Mermaid diagrams — and SVG files render as an image. The tab only appears for files Strand can preview.

History#

Every commit that touched the file, with per-commit +/ line stats, following the file across renames. If the file has uncommitted changes, a "Working tree" entry sits at the top and is selected by default. Click a revision to see the file's change in that commit; double-click to jump to the commit in the All Commits graph.

Compare#

Two pickers — Base and Compare — list the file's revisions; the diff between them renders below (defaulting to previous vs. latest). For image files the comparison is a side-by-side before/after preview on a checkerboard, with a side absent when the file didn't exist at that revision.

Blame#

Per-line authorship for the whole file. Click a line to jump to the commit that last touched it; a back bar returns you to the file view on the same tab.

Diffs in the detail panel, file history, and compare respect your default diff layout (Stacked or Split) — see Settings. For shortcuts across the whole app, see Keyboard & palette.