Skip to content
| Marketplace
Sign in
Visual Studio Code>SCM Providers>IntelliGNew to Visual Studio Code? Get it now.
IntelliG

IntelliG

intellig-vscode

|
54 installs
| (0) | Free
IntelliJ IDEA-style Git workflows for VS Code
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

IntelliG for VS Code

IntelliG is a native-feeling Git UI for VS Code users who miss IntelliJ's. It brings the workflows that made Git pleasant in IntelliJ IDEA's git4idea into VS Code: changelists, the branch popup, the shelf, the interactive-rebase planner, the commit-graph log, a three-pane merge window, and inline blame annotations. Rather than transplant Swing, IntelliG rebuilds those workflows the VS Code way and settles into native touchpoints like the Source Control view and the diff editor.

The IntelliG log with graph visualization

Marketplace

Install IntelliG from either marketplace:

  • Visual Studio Marketplace — https://marketplace.visualstudio.com/items?itemName=KaHoChan.intellig
  • Open VSX (VSCodium, Cursor, Gitpod, and other non-Microsoft builds) — https://open-vsx.org/extension/KaHoChan/intellig

Or from the Extensions view (Ctrl/Cmd+Shift+X), search IntelliG and click Install.

Screenshots

Three-way merge window — resolve conflicts IntelliJ-style: yours, the merged result, and theirs side by side. Accept a side (or both) per conflict, or apply all non-conflicting changes in one click.

Three-way merge window

Inline blame — per-line author, date, and commit as you read, color-coded by commit. Gutter and inline styles, whitespace/movement detection, and open-on-GitHub from the hover.

Inline blame annotations

Commit tool window — Local Changes with staged, unstaged, and untracked files.

Commit tool window

Branch popup — local, remote, and tag groups with contextual actions.

Branch popup

Incoming tab — commits waiting upstream before you pull.

Incoming commits tab

File history — follows renames across the file's whole history.

File history following a rename

Shelve Changes — pick which files to shelve in a dedicated dialog.

Shelve Changes dialog

Features

Commits & Changelists

  • Commit Dialog — structured commit workflow with sign-off, custom author, recent-message history, and issue-link shortcuts
  • Commit Tool Window (on by default) — dedicated SCM view with Local Changes + combined Shelf/Stash tab; disable intellig.useCommitToolWindow to use the classic modal Commit dialog
  • Changelists — organize pending changes into named lists with descriptions and an active-list indicator
  • Revert & Drop Selected Changes — deselect individual files before reverting or dropping
  • Commit File — commit a single file straight from its Explorer right-click menu (top of the IntelliG submenu)

Branches, Tags & Log

  • Branch Popup — sectioned, searchable popup with Recent, Favorites, and contextual action menus
  • Branch Tree Provider — local, remote, and tag groups with right-click context menus
  • Favorites — star branches for quick access
  • New Branch / New Tag dialogs — with validation and remote-start-point detection
  • Log with Graph — commit-history viewer with graph visualization, filtering, jump-to-hash, and cherry-pick highlighting
  • File History — --follow file history with branch filter, diff-any-two, and compare-with-local
  • Branch Comparison — compare any branch with the current branch or the working tree

Push, Pull & Fetch

  • Push Dialog — force-with-lease as the default safe force, protected-branch guard, multi-repo
  • Pull Dialog — --rebase / --ff-only / --autostash flags with automatic conflict handoff
  • Push All Tags
  • Auto Fetch — configurable scheduler with fetch.tags auto-sync and an incoming-commits status-bar badge

Merge, Rebase & Cherry-pick

  • Interactive Rebase — reorder, squash, fixup, edit, reword, and skip commits visually
  • Merge Dialog — strategy flags (--ff-only, --no-ff, --squash) with conflict handoff
  • Three-way Merge View — accept current / incoming / both, plus apply-all-non-conflicting left/right
  • Cherry-pick Variants — standard, without-commit, apply-selected-changes, and apply-files-to-branch

Shelf, Stash & Patches

  • Shelf — shelve and unshelve changes, with silent variants, rename, and import-patches
  • Stash Context Menu — branch-from-stash, rename, drop
  • Apply Patch — create a patch from local changes or apply any .patch / .diff

Blame & Annotations

  • Inline + Gutter Blame — configurable annotation style (inline / gutter / both / off)
  • Blame Options — Ignore Whitespace, Detect Movements Within File / Across Files, Annotate Previous Revision

Integrations

  • Git Tool Window (tabbed) (on by default) — Log, History, Update Info, Incoming, Console tabs; disable intellig.useTabbedGitToolWindow to restore the single Log panel
  • Explorer & Editor Context Menus — stage, unstage, revert, diff, show history, open on remote
  • External Hosting Links — open a commit on GitHub, GitLab, or Bitbucket from the inline blame hover, and turn issue references in commit messages into links to the host
  • Status Bar — current branch + incoming/outgoing commit badge
  • IntelliJ Keymap Preset — optional set of IntelliJ IDEA-style keyboard shortcuts

Multi-repo support

IntelliG discovers Git repositories in three layered ways and surfaces them all together — single-repo workspaces, multi-root workspaces, and folders that contain nested repos all "just work."

  • One workspace folder, one repo. The most common case. The folder itself is treated as a repository if it contains a .git directory.
  • Multi-root workspace. Each top-level workspace folder is scanned for a repo. All discovered repos appear together in the branch popup, status bar, and tool windows.
  • Nested-repo discovery. If a workspace folder contains nested repos (for example, a ~/work/ folder that holds ~/work/projectA/.git and ~/work/projectB/.git), both are discovered up to the configured scan depth.
  • Mid-session new-repo detection. Running git init newproject/ inside a workspace folder is auto-detected — the new repository is picked up without a reload.

Repository scope

When more than one repository is open, the Git Tool Window toolbar shows a repository selector. It controls which repo the Log and the Branches view show:

  • Pick a single repository to scope both views to that repo — the branch tree lists only that repo's local/remote/tag refs, and the log graph shows only its commits.
  • All Repositories (the default) shows a merged view: the branch tree groups every repo's refs, and the log interleaves commits from all roots into one graph.

Right-click actions resolve against the repository the clicked branch, tag, or commit actually belongs to — so in the merged view an action on a ref from one repo never operates on another.

Scan-depth and ignore configuration

Two settings control how deep IntelliG looks for nested repos. Defaults and full descriptions live in the Configuration reference → Multi-repo discovery table below; the short version:

  • intellig.repositoryScanMaxDepth — how many directory levels below each workspace folder are scanned for .git directories. Default 1 (workspace folder itself + immediate children); -1 for unlimited depth (uses a realpath cycle guard so symlink loops are safe). Mirrors VS Code's git.repositoryScanMaxDepth.
  • intellig.repositoryScanIgnoredFolders — extra folder basenames you want to skip during the scan. User-extensible.

The following folder basenames are always excluded from the nested-repo scan and cannot be overridden: .git, node_modules, .vscode, out, dist, .next, target, build, vendor. These are hard-coded to keep the scan fast on real-world projects.

Submodule init mid-session is loaded as a separate top-level repo (intentional — matches VS Code's built-in git extension behaviour).

Diagnostics: Output → IntelliG

IntelliG writes init failures, watcher errors, and per-file operation diagnostics to a dedicated Output channel called IntelliG.

  • Open via VS Code's Output panel (View → Output), then pick IntelliG from the channel dropdown.
  • Init / watcher errors are surfaced here without flooding the notification toast area.
  • Operations that batch over many files — for example Import Patches into Shelf — write a sanitized line per failed file so you can spot the bad one without re-running.
  • All output is sanitized: credentialed URLs and home-directory paths are redacted before being written.

If the IntelliG output channel is missing, the extension didn't finish activating. Reload the window and check the channel again.

Structured-record format

Each diagnostic is written as a structured record — one block per event — so you can scan, grep, and copy entries reliably. The first line always follows this shape:

[<timestamp>] <LEVEL> <component>: <message>
  • <timestamp> is an ISO-8601 instant (e.g. 2026-05-12T14:03:11.482Z).
  • <LEVEL> is the record's severity, uppercased and padded to five characters (TRACE, DEBUG, INFO , WARN , ERROR).
  • <component> names the subsystem that emitted the record.
  • <message> is the sanitized message; embedded newlines are escaped to a literal \n so each record stays on one parseable line.

When present, the following detail lines follow the header, each indented two spaces:

  • ctx=<json> — structured context for the event, as a single-line JSON object.
  • cid=<correlationId> — correlates every record emitted while handling the same command invocation.
  • err=<message> — the error message, followed by its stack trace with each frame on its own indented line.

Controlling log output

Two settings tune what reaches the channel:

  • intellig.log.level — the minimum severity admitted to the logger (trace, debug, info, warn, error, or off; default info). Records below the threshold are dropped before they're built, and off silences the logger entirely. Changes apply to subsequent records without a reload.
  • intellig.log.console — when true, mirror each record to the developer console as well as the channel (default false). The console output is visible only in the Extension Development Host, so this is aimed at contributors debugging IntelliG itself.

Coexistence with VS Code's built-in Git

IntelliG runs git directly via child_process rather than going through VS Code's git extension API. The practical implications:

  • IntelliG works even when git.enabled is set to false.
  • IntelliG registers its own "IntelliG Git" Source Control provider in the SCM view (Staged Changes / Changes groups + a commit input box, Ctrl/Cmd+Enter to commit). It appears alongside VS Code's built-in SCM entry rather than replacing it, so both views keep working — use whichever you prefer, plus IntelliG's IntelliJ-style panels (Branch popup, Git tool window, etc.).
  • File-tree decorations (M / U / A glyphs in the Explorer) come from VS Code's built-in git extension. IntelliG does not register a global file-decoration provider, so it does not double-paint Explorer decorations.
  • You can disable VS Code's built-in git decorations and still have IntelliG's tool windows fully functional.
  • Both extensions write to the same .git/index file. Git serializes concurrent writes via .git/index.lock; if you trigger stage / commit / amend operations in both extensions in the same instant, you may briefly see an "index locked" toast. This is harmless — retry the operation and it will succeed.

Known limitations

  • Submodule init mid-session — auto-loaded as a separate top-level repo (intentional, matches VS Code's git extension).
  • One-shot rm -rf .git/ may not auto-detect — when the entire .git/ directory is removed in a single syscall (rm -rf .git), VS Code's FileSystemWatcher does not always deliver a child-path delete event, so the repo may stay in IntelliG's view until you reload the window. As a workaround, deleting .git/HEAD first (rm .git/HEAD) reliably triggers the removal event. The repo is fully removed if you drag its workspace folder out of VS Code, or on the next window reload.

Requirements

  • VS Code 1.85+
  • Git installed and available on PATH

Keyboard Shortcuts

All keybindings are declared by the extension and listed under Feature Contributions on the extension's page, and in the Keyboard Shortcuts editor (search for intellig) where every chord can be inspected or rebound. An optional IntelliJ IDEA-style preset is available via the intellig.keymapPreset setting — see that setting's description for the one chord that behaves differently under the preset.

Configuration reference

Opt-in feature flags

Setting Default Description
intellig.useCommitToolWindow true Show the IntelliJ-style Commit tool window in the IntelliG panel; disable to use the classic modal Commit dialog
intellig.useTabbedGitToolWindow true Use the tabbed Git tool window (Log/History/Incoming/…)
intellig.keymapPreset "default" "default" or "intellij"

Multi-repo discovery

Setting Default Description
intellig.repositoryScanMaxDepth 1 Max depth for nested-repo discovery; -1 for unlimited
intellig.repositoryScanIgnoredFolders [] Extra folder basenames to skip during the scan
intellig.defaultRepo "" Preferred repo basename or absolute path when multiple are open
intellig.autorefresh true Refresh the Git views live when the working tree changes; off = refresh only on Git ops + manual reload

Commit & Push behavior

Setting Default Description
intellig.commitAuthor "" Optional commit-author override in Name <email> format
intellig.commitMessageIssueLinks true Detect issue/PR references and render as clickable links
intellig.protectedBranches ["main", "master"] Branches that require a confirm before destructive ops
intellig.pullRebase false Use --rebase by default in the Pull dialog
intellig.autoOpenResolveConflictsDialog true Open the Resolve Conflicts dialog automatically on conflicts
intellig.mergeWindow.enabled true Resolve conflicts in the IntelliG three-pane merge window; off = VS Code's built-in merge editor
intellig.mergeWindow.autoApplyNonConflicting false Apply all non-conflicting changes automatically when the merge window opens

Fetch & shelf

Setting Default Description
intellig.autoFetchEnabled true Enable periodic background fetch
intellig.autoFetchInterval 180 Auto-fetch interval in seconds
intellig.fetchTags "auto" Tag-fetch policy: "auto", "all", or "never"
intellig.shelve.removeAppliedFiles false Remove successfully-applied files from a shelf entry

Blame annotations

Setting Default Description
intellig.blameAnnotationStyle "inline" "inline", "gutter", "both", or "off"
intellig.blame.ignoreWhitespace false Pass -w to git blame
intellig.blame.detectMovementsWithinFile false Pass -M to git blame
intellig.blame.detectMovementsAcrossFiles false Pass -C -C to git blame
intellig.blame.colorMode "order" Background tint: "order" (age heat) or "author"
intellig.blame.showAuthor true Show the author column (Author aspect)
intellig.blame.showDate true Show the date column (Date aspect)
intellig.blame.showRevision true Show the revision/hash column (Revision aspect)
intellig.blame.authorNameFormat "full" Author rendering: "full", "firstname", "lastname", "initials", or "email"

Diff

Setting Default Description
intellig.diff.ignorePolicy "default" Whitespace ignore policy for diffs (IntelliJ "Ignore whitespace"): "default", "trim-whitespaces", "ignore-whitespaces", or "ignore-whitespaces-empty-lines"
intellig.lineStatus.enabled true Show live changed-line markers (added/modified/deleted vs HEAD) in the editor gutter, mirroring IntelliJ's change markers

Branches popup

Setting Default Description
intellig.branches.showTags true Show the Tags section in the branches popup (toggle from the popup's settings gear)
intellig.branches.showRecentBranches true Show the Recent section in the branches popup (toggle from the settings gear)
intellig.branches.groupByDirectory true Indent branches that share a /-prefix (e.g. feature/*) in the branches popup

UI polish

Setting Default Description
intellig.log.highlightCherryPicked true Dim commits already cherry-picked into the current branch
intellig.log.showGpgColumn false Show a GPG/SSH signature status column in the commit log
intellig.log.showAllRoots true Show commits from all workspace repositories merged into one log, matching the branch view; disable to scope a multi-repo log to one repository (G8)
intellig.log.showRootNames false Widen the multi-repo log's Root column to show each repository's name on its color, instead of the narrow stripe
intellig.log.showLongEdges false Draw graph edges at full length. Off (default) hides the middle of edges longer than 30 rows and caps them with arrows, matching IntelliJ

Logging

Setting Default Description
intellig.log.level "info" Minimum severity admitted to the logger (trace, debug, info, warn, error, off). Records below the threshold are dropped; off silences the logger entirely.
intellig.log.console false Mirror log records to the developer console (visible only in the Extension Development Host)

Feedback & Issues

Found a bug, have a question, or want to request a feature? Open an issue on the public issue tracker.

For security vulnerabilities, please use GitHub's private vulnerability reporting — your report stays private to repo maintainers and isn't disclosed publicly until a fix ships.

License

Proprietary — all rights reserved. The full LICENSE file is included in the extension package. For licensing inquiries, open an issue tagged licensing.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft