VS Code向けの読み取り専用Gitグラフです。現在のDAGを安定したレーンで示し、Git標準情報から確実に復元できる操作だけを Operation Overlay として重ねます。
推測で履歴を補完しません。証拠が足りない操作は描かず、実際のDAGと証拠のあるブランチ経路を表示します。
Git Linesは、commit object の親子関係(DAG)と、いまの Working Tree を同じタイムラインに載せます。レーンは表示用の配置であり、parent edge を付け替えません。
Amend・Cherry-pick・Rebase などの操作は、reflog や commit 本文など いま残っている Git 標準情報 で証明できるときだけ、DAG とは別層の overlay として表示します。似たメッセージや tree から source を当てません。
- ブランチの流れが崩れにくい Git graph
- 証拠のあるFF取り込みで、取り込み先の継続と取り込み元ブランチの独立・合流を表示
- Working Tree と進行中 operation の統合
- 証拠がある操作だけの Operation Overlay
- Reflog 由来の PREVIOUS / 履歴ルート
- Commit / Operation の Detail Panel
- Detached HEAD と複数 worktree の付随表示
- 読み取り専用(checkout / merge / rebase などは実行しない)
ステータスバーの Git Lines から、メイン画面・下部パネル・左サイドバーを選べます。左サイドバーはレーン間隔を狭め、コミットの点に沿った1行表示にしています。変更量などの詳細はクリックで開く吹き出しに表示し、外側クリックまたはEscで閉じられます。
メイン画面・下部パネルの初期Densityは Compact です。履歴の読み込み・追加取得を高速化し、長距離の接続線や列位置も見やすく調整しました。
Git Lines全体の見え方です。個別のGit操作の意味は、後ろの各 accordion で説明します。
現在の refs から到達できるDAGと Working Tree を表示します。
Reflog が有効なら、PREVIOUS、historical route、reflog-only の履歴を補助表示できます。
複数の関連 commit が安全に特定できる場合、視認性のために group としてまとめることがあります。個別の semantic は各操作の accordion を見てください。
複数 commit が 1 commit へ collapse したことが安全に証明できるとき、専用 overlay で示します。Interactive Squash / Fixup が代表例です。
進行中の Git 操作は、独立した偽の commit ではなく Working Tree 行へ統合します。
Reflog をオフにすると、操作マーク・操作詳細・reflogだけから参照される過去のコミット・過去のref位置を非表示にします。現在の履歴に含まれるコミットは残ります。ブランチの配置・継続・合流には取得できる履歴情報を引き続き利用し、必要な証拠がない関係は推測しません。FFの合流はマークや専用行を置かず、線だけで残します。
Reset / Branch move など ref の移動は、下の各操作 accordion で具体例を見られます。
グラフ上の commit と operation は、どちらも Detail で根拠まで確認できます。
![]() Commit |
![]() Operation |
Commit Detail では additions / deletions、changed files、author、parent、branch / route を見られます。
Operation Detail では操作種別と Evidence に加え、Cherry-pick なら Mappings、Rebase なら独立した Old order / New order、Squash / Fixup なら Old commits / New commit / Rewrite など、その relation が実際に持っている情報だけを出します。
Reliable evidence → Dedicated Operation Overlay
Partial / ambiguous → Safe fallback(generic event または Current DAG)
No reliable evidence → No inferred operation
Git Lines は、commit の類似度や「こうなったはず」という推測だけでは歴史操作を描きません。証明できる範囲だけを overlay にし、それ以外はいまの DAG を優先します。
Intentionally not inferred
次のものは、Git 標準情報から Exact に証明できないため 未実装ではなく意図的に推測しません。
- 完了した Squash Merge の source / range(最終 commit は通常の 1-parent に見える)
- 非連続な Interactive Squash / Fixup の member 集合
-xなどの確実な source が無い Cherry-pick
検出条件や研究メモは グラフアーキテクチャ を参照してください。
現在、実装と確認が済んでいるものだけです。
✅ は、専用 overlay の有無によらず、Evidence-first 方針に基づく扱いが確定・実装済みであることを示します。
| Operation / State | Support | Visualization |
|---|---|---|
| Fast-forward merge | ✅ | 証拠のあるブランチ継続・合流。Reflog ONでは◇ FFも表示 |
| Amend | ✅ | Commit rewrite |
| Cherry-pick | ✅ | Exact relation / 連続時は visual group |
| Revert | ✅ | Cancellation relation |
| Reset | ✅ | Ref movement |
| Branch move | ✅ | Ref movement |
| Branch rename | ✅ | Rename event(位置は動かない) |
| Rebase | ✅ | Single / group rewrite |
| Reorder | ✅ | Group Rebase として扱う。Reorder 自体は推測しない |
| Drop | ✅ | Generic Rebase fallback |
| Reword | ✅ | Generic Rebase + Exact local Reword |
| Edit | ✅ | Generic Rebase + 実際に観測された operation |
| Interactive Squash / Fixup | ✅ | 安全な連続 N → 1 のみ |
| Detached HEAD | ✅ | 専用の HEAD 状態 |
| Multiple worktrees | ✅ | Commit 上の worktree 注釈 |
| In-progress operations | ✅ | Working Tree 行へ統合 |
| Branch delete / reflog-only | ✅ | Historical / UNREFERENCED |
| ORIG_HEAD | ✅ | 通常の commit / special ref |
| Reflog OFF | ✅ | 操作・reflog-only履歴を非表示。証拠のあるブランチ経路は維持 |
Git Lines は Operation Overlay とは別に、Git object の実際の parent 関係をそのまま DAG として描画します。特殊な topology でも、架空の edge や operation は追加しません。
| Topology | Support | Visualization |
|---|---|---|
| Normal branch / merge | ✅ | 通常の DAG |
| Octopus merge | ✅ | 3つ以上の parent edge |
| Criss-cross merge | ✅ | 交差する merge DAG |
| Multiple roots | ✅ | 独立 root を別々に表示 |
| Unrelated histories merge | ✅ | merge commit で初めて履歴を接続 |
| Orphan branch | ✅ | 独立 root を持つ通常 branch として表示 |
これらには専用 Operation Overlay を追加せず、実際の parent relation そのものを描画します。
Fast-forward(FF):取り込み操作と取り込み元ブランチの由来を確認できる場合、取り込み元ブランチのcommitを独立した列に残し、取り込み先の継続線へつなぎます。新しいmerge commitは作らず、実parentや現在のref位置も変えません。取り込み元ブランチを削除した後も、証拠と必要なcommitが残る限り経路を表示しますが、削除済みのrefラベルは復活させません。
Cherry-pick
source を Git 標準情報から確実に追跡できる場合だけ、source → created commit の relation を表示します。連続した Exact relation は、視認性のため visual group にまとめることがあります。
進行中の Cherry-pick は Working Tree 行へ統合します。
Rebase
完了 session と linear な old / new range を安全に復元できる場合、single または group rewrite として表示します。
Reorder は completed evidence だけでは通常 Rebase と区別できないため専用表示せず、Group Rebase として扱います。個別 commit の mapping や順序維持は主張しません。Drop は dropped member を Exact に特定できないため、Generic Rebase へ fallback します。
Reword は完了 session 内で reflog が直接証明する局所 rewrite だけを Reword relation として表示し、Generic Rebase と併記します。Edit 自体には専用 relation を作らず、実際に観測された Amend 等を Generic Rebase と併記します。
画像は、rebase session 内の UNREFERENCED な一時 commit T → B reworded(B′)を reflog が直接証明する Exact local Reword relation です。元の pre-rebase commit B との個別 mapping は推測しません。
進行中の Rebase は Working Tree 行へ統合します。
Squash / Fixup
Interactive Rebase で、連続した old range が 1 commit へ collapse したことと、rebase (squash) / rebase (fixup) を安全に証明できる場合だけ専用表示します。Squash の見た目は上の N → 1 rewrite と同じです。
Reset
Reset は commit rewrite ではなく、ref の位置が動いたこととして表示します。現在の ref と、必要なら historical な ghost ref を使います。
Branch move
branch ref の tip 移動は、Reset と同じ Ref Movement の見た目を使います。次の画像は Reset と Branch move が連続した例です。
Revert
完了した Revert は、target の打ち消し関係として created revert commit を結ぶことがあります。target 側には専用 marker を付けます。完了専用のスクリーンショットは、現時点では README にありません。
進行中の Revert は Working Tree 行へ統合します。
Merge in progress
完了した通常 Merge、Octopus merge、Unrelated histories merge は、いずれも専用 Operation Overlay を追加せず、Current DAG の実際の parent relation として表示します。進行中の Merge は Working Tree 行へ統合します。
Unrelated histories merge
独立していた2つの history は、実際の merge commit で初めて接続されます。専用の Unrelated operation overlay は作りません。
VS Code 1.90以降と、PATHから実行できるGitが必要です。Git repositoryのfolderを開き、Workspace Trustを有効にして利用します。Remote Workspaceでは、その接続先にGitが必要です。仮想workspace(Git CLIで読めるファイルがない環境)は対象外です。
- ステータスバーの
Git Lines、または Command Palette のGit Lines: Openから、Open in Editor(メイン画面)/Open in Panel(下部パネル)/Open in Sidebar(左サイドバー)を選びます。複数folderを開いている場合は続けてrepositoryを選びます。 - グラフ上の
?の左にある歯車ボタン でレーン配置・Reflog・Densityを選びます。Refreshはグラフのヘッダーから操作できます。 - commit または operation を選ぶと詳細が開きます(左サイドバーでは吹き出し表示)。
- 初期表示は 30 commit です。下へスクロールすると残りが少なくなった時点で追加されます(
Load moreも利用できます)。
VSIXからインストールする場合は、Command Paletteの Extensions: Install from VSIX... で、利用するバージョンの releases/git-lines-<version>.vsix を選びます。
下部パネルでは「ターミナル」「出力」などと並ぶ Git Lines タブ、左サイドバーではアクティビティバーの専用アイコンから表示します。どの表示先でも同じグラフ・Reflog・詳細情報を利用できます。Command Paletteの Git Lines: Open in Editor / Git Lines: Open in Panel / Git Lines: Open in Sidebar から表示先を直接指定することもできます。
グラフは読み取り専用です。checkout、branch 作成、merge、rebase、push など Git を変更する操作は提供しません。
グラフ上の 「?」の左にある歯車ボタン、または Git Lines: Settings から設定できます。変更は保存され、次回起動時と開いている各表示に反映されます。通常はユーザー設定へ保存し、ワークスペース側の指定がある場合は保存先を表示します。Densityはメイン画面・下部パネルに適用し、左サイドバーは専用の行間隔を維持します。
レーン配置は Standard(初期値)と Default Fixed(default列を左端に固定)から選べます。両モードとも、証拠から確認できる分岐元と子ブランチの履歴を独立した列に保ちます。Standardは未マージ時と子から親へ取り込んだ場合に親を左へ配置します。逆に親を子へ取り込んだ場合、その配置は保証しません。Default Fixedは所属を保ったままdefault列を最左へ固定します。Reflog OFFでも識別のために記録を内部利用し、分岐元が曖昧な区間は推測で並べ替えません。
defaultはローカルに保存されたremote HEADから判定します。未判定の場合は設定内の Fixed target から選択できます。この指定はrepositoryごとにVS Code内へ保存され、Gitの設定は変更しません。
GitHubの初期表示は日本語の README.md、英語版は README.en.md です。Marketplaceには README.marketplace.md をパッケージ時に指定します。内容を更新するときは3ファイルを合わせて確認してください。
pnpm install
pnpm lint
pnpm test
pnpm build一括確認は pnpm check(lint + test + build)です。Extension Host の bundle は dist/extension.js、Webview は dist/webview です。watch 用の pnpm test:watch と Webview 開発用の pnpm dev:webview もあります。
ビルド後、開発用のVS Codeウィンドウを起動できます。
code --extensionDevelopmentPath="<path-to-git-lines>" "<path-to-repository>"pnpm package はビルドを実行し、releases/git-lines-<version>.vsix を生成します。バージョンごとにファイルを残せます(同じバージョンの再生成は上書き)。公開処理は行いません。
| Setting | Default | 内容 |
|---|---|---|
branchGraph.layoutMode |
legacy |
従来の配置 / default列固定(default-fixed) |
branchGraph.showReflog |
true |
操作マーク・過去コミットの表示。ブランチ経路の証拠利用は維持 |
branchGraph.density |
compact |
行密度(comfortable / compact) |
branchGraph.initialCommitCount |
30 |
最初に読み込む commit 数 |
branchGraph.loadMoreCount |
10 |
追加読み込み件数 |
branchGraph.primaryBranch |
null |
主レーンにする branch(未指定時は自動) |
主要な local Git operation と特殊 DAG topology への対応は一旦完了しています。
今後の候補:
- remote / ref の境界ケース
- shallow clone
- reflog の期限切れ / 欠落
- repository / history 境界の追加検証


























