gst is a read-only Git status visualizer for people who want to understand the
shape of a repository before they run Git commands.
Git beginners often struggle because the current state is split across several places:
- commits and branches form a graph
- local branches and remote tracking branches can point at different commits
- the index and working tree can each contain different file changes
gst puts those pieces into one terminal dashboard. It does not push, pull,
checkout, commit, merge, rebase, or mutate the repository.
go install github.com/lef237/gst/cmd/gst@latestOr with Homebrew:
brew install lef237/tap/gstFor local development:
go run ./cmd/gstTo build a local binary:
go build -o tmp/gst ./cmd/gstRelease steps are documented in docs/release.md.
gst
gst --interval 1s
gst --once
gst --no-colorBy default, gst opens the interactive TUI.
Interactive controls:
- Move between views with
tab, the left/right arrow keys, or by clicking a tab label. - Jump directly to a view with
1-8. - Show help with
?. - Toggle display modes:
t: nativegit statusaon the graph view: detailed--allgraphson the diff view: worktree/staged diff
- Copy diffs from the diff view:
y: worktree diffi: staged/index diffa: full text patch fromHEADto the worktree, including untracked files (binary file contents are omitted)
- Scroll graph, diff, and long list views with less-like keys:
j/k: one lined/u: half a pagef/b: one page
- Select and copy on-screen text with
v: this toggles text selection mode, which releases the mouse so you can drag-select text and copy it with your terminal. The view freezes while selecting; pressvagain to resume mouse tab switching. (Alternatively, without toggling, holdOptionon macOS orShifton most Linux terminals while dragging to select.) - Refresh with
r; quit withq.
The current tab's available keys are always shown in the footer. The available views are:
overviewgraphfilesdiffbranchesstashrefsremote
sync: the relationship between the current local branch and its upstreamworkspace: staged, modified, untracked, and conflicted file counts rendered as compact dashboard meterscommit graph: recent commits across local and remote refs; graph view can toggle a detailed--allgraph withaand scroll through older commitschanged files: a compact list of working tree and index changes with explicit kind labelsdiff: the current worktree or staged patch, toggled withsbranches: current branch, upstream, and local/remote branch relationshipsstash: temporary saved work outside the current branchrefs: local/remote branches and tags with recent commit or tag agesrepository notes: remotes, stashes, and non-fatal collection warningsattention: in-progress merge/rebase/cherry-pick/revert guidance when relevant
The intended mental model is:
local ahead: your machine has commits the remote cannot see yetlocal behind: the remote has commits your machine has not copied yetdiverged: both sides have unique commitsindex: the next commit you are buildingworktree: the files currently on disk
- read-only Git commands only
- no network synchronization
- no dependency on a GitHub API token
- works as a plain CLI snapshot and as a lightweight watch-mode TUI
