Skip to content

Latest commit

 

History

127 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Git Lines

日本語 English

VS Code向けの読み取り専用Gitグラフです。現在のDAGを安定したレーンで示し、Git標準情報から確実に復元できる操作だけを Operation Overlay として重ねます。

Git Linesのメイングラフ。安定したレーン上のブランチ履歴とWorking Tree

推測で履歴を補完しません。証拠が足りない操作は描かず、実際のDAGと証拠のあるブランチ経路を表示します。

What is Git Lines?

Git Linesは、commit object の親子関係(DAG)と、いまの Working Tree を同じタイムラインに載せます。レーンは表示用の配置であり、parent edge を付け替えません。

Amend・Cherry-pick・Rebase などの操作は、reflog や commit 本文など いま残っている Git 標準情報 で証明できるときだけ、DAG とは別層の overlay として表示します。似たメッセージや tree から source を当てません。

Features

  • ブランチの流れが崩れにくい Git graph
  • 証拠のあるFF取り込みで、取り込み先の継続と取り込み元ブランチの独立・合流を表示
  • Working Tree と進行中 operation の統合
  • 証拠がある操作だけの Operation Overlay
  • Reflog 由来の PREVIOUS / 履歴ルート
  • Commit / Operation の Detail Panel
  • Detached HEAD と複数 worktree の付随表示
  • 読み取り専用(checkout / merge / rebase などは実行しない)

Display options

ステータスバーの Git Lines から、メイン画面・下部パネル・左サイドバーを選べます。左サイドバーはレーン間隔を狭め、コミットの点に沿った1行表示にしています。変更量などの詳細はクリックで開く吹き出しに表示し、外側クリックまたはEscで閉じられます。

メイン画面・下部パネルの初期Densityは Compact です。履歴の読み込み・追加取得を高速化し、長距離の接続線や列位置も見やすく調整しました。

Visual Overview

Git Lines全体の見え方です。個別のGit操作の意味は、後ろの各 accordion で説明します。

Current DAG

現在の refs から到達できるDAGと Working Tree を表示します。

現在のrefsから到達できるDAGとWorking Tree

Historical context

Reflog が有効なら、PREVIOUS、historical route、reflog-only の履歴を補助表示できます。

PREVIOUSとhistorical routeの補助表示

Grouped visualization

複数の関連 commit が安全に特定できる場合、視認性のために group としてまとめることがあります。個別の semantic は各操作の accordion を見てください。

関連commitをまとめたgroup可視化の例

N → 1 rewrite

複数 commit が 1 commit へ collapse したことが安全に証明できるとき、専用 overlay で示します。Interactive Squash / Fixup が代表例です。

複数commitが1commitへcollapseしたrewrite overlay

In-progress integration

進行中の Git 操作は、独立した偽の commit ではなく Working Tree 行へ統合します。

進行中操作をWorking Tree行へ統合した表示

Reflog OFF

Reflog をオフにすると、操作マーク・操作詳細・reflogだけから参照される過去のコミット・過去のref位置を非表示にします。現在の履歴に含まれるコミットは残ります。ブランチの配置・継続・合流には取得できる履歴情報を引き続き利用し、必要な証拠がない関係は推測しません。FFの合流はマークや専用行を置かず、線だけで残します。

Reflogオフ時の操作・過去履歴の非表示例

Reset / Branch move など ref の移動は、下の各操作 accordion で具体例を見られます。

Detail Panel

グラフ上の commit と operation は、どちらも Detail で根拠まで確認できます。

Commit Detail。変更量、ファイル、author、parent
Commit
Operation Detail。Evidenceとrewrite情報
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 が実際に持っている情報だけを出します。

Evidence-first Design

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

検出条件や研究メモは グラフアーキテクチャ を参照してください。

Supported Operations

現在、実装と確認が済んでいるものだけです。

✅ は、専用 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履歴を非表示。証拠のあるブランチ経路は維持

Supported DAG Topologies

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 そのものを描画します。

Git Operations

Fast-forward(FF):取り込み操作と取り込み元ブランチの由来を確認できる場合、取り込み元ブランチのcommitを独立した列に残し、取り込み先の継続線へつなぎます。新しいmerge commitは作らず、実parentや現在のref位置も変えません。取り込み元ブランチを削除した後も、証拠と必要なcommitが残る限り経路を表示しますが、削除済みのrefラベルは復活させません。

Cherry-pick

source を Git 標準情報から確実に追跡できる場合だけ、source → created commit の relation を表示します。連続した Exact relation は、視認性のため visual group にまとめることがあります。

完了Cherry-pickのSOURCEからTARGETへのrelation

In progress

進行中の Cherry-pick は Working Tree 行へ統合します。

進行中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 と併記します。

Completed

完了RebaseのOLDとNEWのgroup overlay

Reword

画像は、rebase session 内の UNREFERENCED な一時 commit T → B reworded(B′)を reflog が直接証明する Exact local Reword relation です。元の pre-rebase commit B との個別 mapping は推測しません。

Rebase内部の一時commitからreword後commitへのExact Reword relation

In progress

進行中の Rebase は Working Tree 行へ統合します。

進行中RebaseのWorking Tree表示

Squash / Fixup

Interactive Rebase で、連続した old range が 1 commit へ collapse したことと、rebase (squash) / rebase (fixup) を安全に証明できる場合だけ専用表示します。Squash の見た目は上の N → 1 rewrite と同じです。

連続FixupのOLD GROUPから1つのNEW commit

Reset

Reset は commit rewrite ではなく、ref の位置が動いたこととして表示します。現在の ref と、必要なら historical な ghost ref を使います。

Resetのref移動overlay

Branch move

branch ref の tip 移動は、Reset と同じ Ref Movement の見た目を使います。次の画像は Reset と Branch move が連続した例です。

ResetとBranch moveが連続したref操作の例

Branch rename

tip の位置は動かず、ref 名だけが変わった event として表示します。

Branch renameイベント

Revert

完了した Revert は、target の打ち消し関係として created revert commit を結ぶことがあります。target 側には専用 marker を付けます。完了専用のスクリーンショットは、現時点では README にありません。

In progress

進行中の Revert は Working Tree 行へ統合します。

進行中RevertのWorking Tree表示

Merge in progress

完了した通常 Merge、Octopus merge、Unrelated histories merge は、いずれも専用 Operation Overlay を追加せず、Current DAG の実際の parent relation として表示します。進行中の Merge は Working Tree 行へ統合します。

進行中MergeのWorking Tree表示

Special Git States

Detached HEAD

branch ref がなくても、HEAD がいま指している commit は live な現在状態として扱います。

Detached HEADのグラフ表示

Multiple Worktrees

linked worktree のために新しい graph lane は作りません。対象 commit 上の注釈として表示します。

複数worktreeのcommit注釈

DAG Topologies

Octopus merge

3つ以上の parent を持つ merge commit でも、全 parent edge を実際の parent relation に従って描画します。

Octopus mergeで複数のparent edgeが1つのmerge commitへ接続するGit Lines表示

Criss-cross merge

互いを merge したことで交差する DAG でも、parent relation と branch lane を維持します。

Criss-cross mergeの交差するDAGとbranch lane

Multiple roots

共通祖先を持たない複数の root を、存在しない edge でつながず独立して表示します。

共通祖先を持たない複数のrootを独立して表示したDAG

Unrelated histories merge

独立していた2つの history は、実際の merge commit で初めて接続されます。専用の Unrelated operation overlay は作りません。

独立した2つの履歴が実際のmerge commitで接続されたDAG

Orphan branch

orphan branch は、既存履歴とは独立した root を持つ通常 branch として表示します。

既存履歴とは独立したrootを持つorphan branchのDAG

使い方

VS Code 1.90以降と、PATHから実行できるGitが必要です。Git repositoryのfolderを開き、Workspace Trustを有効にして利用します。Remote Workspaceでは、その接続先にGitが必要です。仮想workspace(Git CLIで読めるファイルがない環境)は対象外です。

  1. ステータスバーの Git Lines、または Command Palette の Git Lines: Open から、Open in Editor(メイン画面)/Open in Panel(下部パネル)/Open in Sidebar(左サイドバー)を選びます。複数folderを開いている場合は続けてrepositoryを選びます。
  2. グラフ上の ? の左にある歯車ボタン でレーン配置・Reflog・Densityを選びます。Refreshはグラフのヘッダーから操作できます。
  3. commit または operation を選ぶと詳細が開きます(左サイドバーでは吹き出し表示)。
  4. 初期表示は 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の設定は変更しません。

Development

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 を生成します。バージョンごとにファイルを残せます(同じバージョンの再生成は上書き)。公開処理は行いません。

Settings

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(未指定時は自動)

Roadmap

主要な local Git operation と特殊 DAG topology への対応は一旦完了しています。

今後の候補:

  • remote / ref の境界ケース
  • shallow clone
  • reflog の期限切れ / 欠落
  • repository / history 境界の追加検証

Technical Documentation

About

Gitのブランチ構造と履歴を、世界一見やすいレーン表示で可視化するVS Code拡張

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages