A native Git client that opens where you are. The commit graph, your worktrees, every diff. Fast, and in sync with the terminal.
brew install --cask helgesverre/tap/sourcefour
macOS · Windows · Linux · MIT
The graph
Merges show both parents. Octopus merges show all of them. Each line of development keeps its own colour from tip to root, and the commit you have checked out gets a highlighted ring.
Lanes are assigned by an incremental algorithm as commits stream in, so the drawing stays correct while history is still loading.
The sidebar
Linked worktrees sit at the top of the sidebar with the branch each one has checked out: locked, detached, or sitting on a drive you unplugged. Branches carry their ahead/behind counts; remotes carry their tracking branches.
Click a branch to scope history to it. Click again to widen back out.
Including the odd states: a lock, a detached HEAD, or a checkout on a drive that's gone. Read directly from Git, not inferred.
Diffs
Click any changed file and its diff fills the window, syntax-highlighted and monospaced, with word-level changes and old and new line numbers where Git puts them. Escape closes it.
The scrollbar doubles as a scrubber, so you can jump through a ten-thousand-line diff without scrolling line by line.
Side by side
One click swaps the layout, and the choice is remembered the next time you open a diff. Similar additions and deletions are aligned, context folds out of the way, and wrapping is available when a long line needs it.
Unified
Split
Images
PNG, JPEG, GIF, WebP and friends open as pictures, not as a note saying the file is binary. Drag the divider to wipe between before and after, or switch to side by side when you want both at once.
An added or deleted image says so on the missing half rather than showing you an empty box.
GitHub Actions
Click a run and the failing job is already selected, the failing step already open, the log already scrolled to the first error. No tabs, no spinners, no digging.
Duration bars show where the minutes went, a timeline shows what ran in parallel, and a run that is still going updates itself every few seconds. Pull requests get chips on their branches; commits get CI dots in the history.
Run it from inside a repository and it opens straight to that repo's history. No picker, no setup. Commit, rebase, or tag from your terminal and the window updates itself.
What you get
Every linked worktree appears with its branch, its path and its state: locked, detached, or missing its checkout entirely.
Branches created, tags pushed and commits made outside the app show up on their own, without a noticeable delay.
Commits load progressively on a worker thread, so a million-commit repository opens as fast as a ten-commit one.
Fetch, pull and push run your own git, so SSH keys, credential
helpers and hooks behave exactly as they do in the terminal.
Arrows, Page Up/Down, Home and End drive the list. Cmd+F filters it. Selection follows the commit, not the row number.
Drag the panel dividers, reorder the sidebar sections, collapse the details pane. It all comes back the way you left it.