Git LinesA read-only Git graph for VS Code. See the current DAG in stable lanes, with Operation Overlays only for operations that can be reliably reconstructed from standard Git data.
Git Lines does not fill gaps with guesses. When evidence is insufficient, it leaves the current DAG without an inferred operation. What is Git Lines?Git Lines places commit parent relationships (the DAG) and the current Working Tree on one timeline. Lanes are a visual arrangement; parent edges are never reassigned. Operations such as Amend, Cherry-pick, and Rebase appear in a separate overlay layer only when standard Git data still available, such as reflogs and commit bodies, proves them. Similar messages or trees are not used to guess a source. Features
Display optionsChoose the editor, bottom panel, or left sidebar from Git Lines in the status bar. The sidebar uses narrower lanes and single-line messages aligned with commit nodes. Click to open details, including change statistics, in a popover; click outside or press Esc to close it. Editor and bottom-panel views default to Compact density. History loading and pagination use performance optimizations, with improved long-distance connections and column alignment. Visual OverviewAn overview of the graph. Expand the operation sections below for the meaning of each Git operation. Current DAGDisplay the DAG reachable from current refs alongside the Working Tree.
Historical contextWith Reflog enabled, show additional context including PREVIOUS commits, historical routes, and reflog-only history.
Grouped visualizationWhen related commits can be reliably identified, they may be grouped for readability. See each operation section for its specific semantics.
N → 1 rewriteA dedicated overlay shows multiple commits collapsing into one when the rewrite can be reliably proven. Interactive Squash and Fixup are examples.
In-progress integrationIn-progress Git operations are integrated into the Working Tree row, rather than represented as artificial commits.
Reflog OFFTurning Reflog off hides operation marks, operation details, reflog-only past commits, and historical ref positions. Commits in the current history remain visible. Available history evidence still supports branch layout, continuation, and intake. Unproven relationships are never guessed. Proven FF intake remains as lines, without an event mark or annotation row.
See the operation sections below for examples of ref movements such as Reset and Branch move. Detail PanelInspect both commits and operations in Detail, including the evidence behind an operation.
Commit Detail shows additions, deletions, changed files, author, parents, and branch or route. Operation Detail shows the operation type, Evidence, and only the information actually available for that relation: Mappings for Cherry-pick, independent Old order / New order for Rebase, or Old commits / New commit / Rewrite for Squash and Fixup. Evidence-first Design
Git Lines does not infer past operations solely from commit similarity or assumptions about what happened. It overlays only what can be proven and otherwise prioritizes the current DAG. Intentionally not inferredThe following are intentionally not inferred, because standard Git data cannot establish them exactly:
See Graph architecture for detection conditions and research notes (Japanese). Supported OperationsOnly implemented and verified behavior is listed here. ✅ means that handling is implemented under the evidence-first policy, whether or not it produces a dedicated overlay.
Supported DAG TopologiesIndependently of Operation Overlays, Git Lines draws the actual parent relationships stored in Git objects. Complex topologies do not introduce invented edges or operations.
These topologies use actual parent relationships, without dedicated Operation Overlays. Git OperationsFast-forward (FF): When the merge and source branch’s origin are established, source commits remain in a separate column connected to the receiving branch’s continuation line. No merge commit is created, and actual parents and current ref positions stay unchanged. After the source branch is deleted, its route remains while the evidence and required commits are available; deleted ref labels are not restored. Cherry-pickA source → created commit relation appears only when standard Git data reliably identifies the source. Consecutive exact relations may be grouped for readability.
In progressAn in-progress Cherry-pick is integrated into the Working Tree row.
RebaseA completed session appears as a single or group rewrite when its linear old and new ranges can be reliably reconstructed. Completed evidence generally cannot distinguish Reorder from an ordinary Rebase, so it is shown as Group Rebase. This does not claim individual commit mappings or preserved order. Drop falls back to Generic Rebase when the dropped members cannot be identified exactly. Reword shows only a local rewrite directly proven by the reflog within a completed session, alongside Generic Rebase. Edit has no dedicated relation; an actually observed operation such as Amend appears alongside Generic Rebase. Completed
RewordThe image shows an exact local Reword relation directly proven by the reflog: an UNREFERENCED temporary commit T → B reworded (B′) within a rebase session. It does not infer an individual mapping from the original pre-rebase commit B.
In progressAn in-progress Rebase is integrated into the Working Tree row.
Squash / FixupA dedicated visualization appears only when evidence reliably proves that a contiguous old range collapsed into one commit during Interactive Rebase, with
ResetReset is shown as a ref changing position, rather than a commit rewrite. It uses current refs and historical ghost refs where needed.
Branch moveA branch tip movement uses the same Ref Movement visualization as Reset. The image shows consecutive Reset and Branch move operations.
Branch renameBranch rename appears as an event that changes the ref name without moving its tip.
RevertA completed Revert may connect the created revert commit to its target with a cancellation relation and a dedicated target marker. This README does not currently include a screenshot of a completed Revert. In progressAn in-progress Revert is integrated into the Working Tree row.
Merge in progressCompleted normal merges, Octopus merges, and unrelated-history merges appear as actual parent relationships in the Current DAG, without dedicated Operation Overlays. An in-progress Merge is integrated into the Working Tree row.
Special Git StatesDetached HEADThe commit currently pointed to by HEAD remains part of the live state even without a branch ref.
Multiple WorktreesLinked worktrees appear as annotations on their commits, without creating additional graph lanes.
DAG TopologiesOctopus mergeFor a merge commit with three or more parents, every parent edge follows the actual Git parent relationship.
Criss-cross mergeCrossing DAGs produced by mutual merges retain their parent relationships and branch lanes.
Multiple rootsRoots without a common ancestor are displayed independently, without invented connecting edges.
Unrelated histories mergeTwo independent histories first connect at the actual merge commit. No dedicated Unrelated operation overlay is created.
Orphan branchAn orphan branch appears as a normal branch with a root independent of existing history.
UsageRequires VS Code 1.90 or later and Git available on PATH. Open a Git repository folder and enable Workspace Trust. Remote workspaces require Git on the remote host. Virtual workspaces without files accessible to the Git CLI are not supported.
To install a VSIX, run The bottom panel has a The graph is read-only. It does not provide Git mutations such as checkout, branch creation, merge, rebase, or push. Display settingsUse the gear button to the left of ? in the graph, or run Choose Standard (the default) or Default Fixed. Both modes keep evidence-backed source and child branch histories in separate columns. Standard keeps the source to the left before a merge and when it receives the child. If the source is merged into the child, that placement is not guaranteed. Default Fixed places the default column leftmost while preserving route identities. Reflog records are used internally even when their display is off. Ambiguous branch origins are not guessed. The target is resolved from locally stored remote HEAD metadata. If unresolved, choose a Fixed target in Settings. This override is stored per repository inside VS Code and does not modify Git configuration. DevelopmentGitHub defaults to the Japanese
Run After building, launch a development VS Code window:
Settings
RoadmapSupport for the planned major local Git operations and special DAG topologies is complete. Possible next areas:
Technical Documentation
|

