⬡Commit log & graph
The centre of the main panel: the entire commit history, drawn with HydraGit's own
lane-assignment engine (not git log --graph), virtualized so it scrolls
smoothly at any repository size.
Commit log log
Entry points
- Main panelThe log loads automatically when the panel opens — no action needed.
- ToolbarThe branch pill scopes the log to a branch; its pinned All branches entry switches to
--all. - SearchThe search box re-queries the log server-side — see Search & filter.
What happens next
- Go runs log with
{ branch?, limit?, grep?, author? },--topo-order, returning author / date / message / refs / parents. - The commits pass through
internal/graph(AssignLanes) which returnsLaidOutCommits with lane, color and connector paths. - The webview renders the rows. No row cap — the entire history loads.
Lane graph
The inline SVG graph: colored dots, branch-line colors and merge curves. Key properties of the engine:
- Correct connections — a branch only ever connects to its real parent; a merge node's incoming lines are only its real parents (no false folds).
- Compact — branches sharing an ancestor reuse lanes via short bundle diagonals (the
| |/shape). 50 branches off one base render in ~3 lanes, validated row-by-row againstgit log --graph. - Genuinely-parallel branches still render wide — correct, not collapsed.
- Handles merges, octopus (3+ parents), criss-cross, multiple roots, re-merge churn, lane recycling, same-timestamp topologies.
- Per-branch-line color — color follows the branch line, not the lane (lanes get reused), so each line stays consistently colored.
Hover-highlight
Hovering a commit row highlights that commit's branch line end-to-end and dims the rest of the graph, making a single thread easy to follow through merges.
Commit detail pane diff
Clicking a row loads it into the right-hand DetailPane: metadata (author, date, full message, refs), the changed-file tree, and an inline diff. Selecting a file runs diff for its hunks.
Columns & virtualization
- Resizable columns — drag the edges of the Commit / Author / Date headers.
- Virtualized window — only the visible rows are in the DOM (
graphSvg.tsbuilds just the windowed SVG paths), keeping huge histories fast.