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

vGit

Samuel Etterlen

|
172 installs
| (1) | Free
Eclipse EGit-style staging view with advanced commit graph visualization for managing Git changes across multiple repositories
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

vGit

A powerful VS Code extension (formerly "Git Staging View") that provides an Eclipse EGit-style staging view with advanced commit graph visualization for managing Git changes across multiple repositories.

This extension is inspired by the excellent Git Graph extension, incorporating its graph visualization approach while adding a comprehensive staging interface.

Screenshots

Main View

Main Staging View Dual-panel layout with file staging on the left and interactive commit graph on the right

Staging Panel in Action

Staging Panel Demo Stage, unstage, and stash files with inline buttons, drag-and-drop, and the dedicated Stashes panel

Context Menus

File Operations

File Context Menu Right-click files to compare, stage/unstage, or replace with different revisions

Commit Operations

Commit Context Menu Right-click commits to cherry-pick, reset, revert, or create branches

Branch Operations

Branch Context Menu Right-click branch names in the commit history to switch branches

Repository Operations

Repository Context Menu Right-click repository to switch branches, fetch, pull, reset, or rebase

Quick Diff Panel

Quick Diff View View all files changed on the current branch compared to its closest parent branch

Features

Layout

  • Main Panel: Interactive commit graph with branch selection sidebar
  • Bottom Panel: Unstaged/staged changes with tree view, commit message area, and action buttons
  • Resizable Sidebar: Drag the sidebar edge to resize the branch selection panel
  • Resizable Graph Column: Drag the resize handle in the graph header or any row to adjust graph width

Advanced Commit Graph

The history lanes display is inspired by the excellent vscode-git-graph extension.

  • SVG-Based Visualization: Beautiful colored branch lanes with curved merge lines
  • Compact Layout: Optimized lane assignment with longest branches on the left
  • Sticky Column Headers: Graph, Message, Author, Date, and Commit headers stay visible when scrolling
  • EGit-Style Display:
    • Commit hash in rightmost column
    • Visual graph lanes in leftmost column
    • Commit message starting right after the graph
    • Author and date columns
    • Consistent 13px font size
  • Infinite Scroll: Automatically loads more commits as you scroll
  • Search & Filter:
    • Search by commit hash, message, branch name, tag, or author
    • Clear button (×) for quick search reset
    • Press Enter to execute search
  • Optional Commit Hover Details: Hover a commit for a metadata popup, then move into it to load full details. Disable this behavior with the gitStagingView.showCommitDetailsOnHover setting, and set how long to wait before the popup appears (in milliseconds, default 500) with gitStagingView.commitDetailsHoverDelay.
  • Branch Selection Panel:
    • Interactive sidebar to filter the commit graph by specific branches
    • Toggle local branches, individual remote branches, and tags
    • Group controls for selecting/deselecting all local or remote branches at once
    • Filter input to quickly find branches by name
    • Context menu on branches for checkout and delete
    • Selected branch HEAD highlighting: commits at the tip of individually selected branches are highlighted with a dark red background
    • Resizable sidebar: Drag the right edge to resize (150px–600px), width persists across refreshes
  • Favorite Branches:
    • Mark frequently used branches as favorites for quick access
    • Right-click any branch → "Add to Favorites" to pin it to the Favorites section
    • Right-click a favorite → "Remove from Favorites" to unpin it
    • Favorites appear between Controls and Selected Branches in the sidebar
    • Select/deselect favorites with checkboxes, just like regular branches
    • Favorites are stored per repository and persist across sessions
    • Stale favorites are automatically removed when branches are deleted from the repo
  • Branch Views:
    • Toggle between current branch and all branches
    • Hide remote commits option (checked by default)
    • Show Tags toggle (unchecked by default) - displays tag names in graph
  • Tag Tooltip: Hover over displayed tag at top to see all repository tags
  • Commit Selection: Select multiple commits using checkboxes
    • Visual highlighting of selected commits
    • Selection state persists during graph updates
    • Choose whether to compare the selected commit with its previous commit, current HEAD, or the working-tree version
    • Historical and local comparison snapshots open as read-only documents
  • Revision Information: Annotate each source line with the commit, author, and date that last changed it
    • Run vGit: Toggle Revision Information from the editor context menu or Command Palette
    • Shown in a fixed-width column left of the code with an age heatmap bar; lines of the commit under the cursor are highlighted
    • Click an annotation to open its commit in the History view
  • Current Line Revision Information (on by default): author, date and hash of the line under the cursor, shown at the end of that line and in the status bar. It follows unsaved edits; lines you changed show as "Uncommitted changes"
    • Hover the annotation for the author, the full commit message and the change that introduced the line, with Open Changes, Show in History and Copy Hash actions (gitStagingView.revisionInfo.hover shows it over the whole line or turns it off)
    • Turn it on or off with vGit: Toggle Current Line Revision Information; click the status bar entry to open the commit in the History view
  • Context Menu: Right-click any commit for:
    • Squash Selected Commits (when 2+ commits selected)
    • Cherry-pick
    • Reset (soft/mixed/hard)
    • Revert
    • Reword Commit Message (HEAD commit only)
    • Create branch from commit
    • Bookmark this Commit
  • Commit Bookmarks:
    • Bookmark commits to save them for later use (e.g., cherry-picking across branches)
    • Bookmarks appear in a dedicated "Bookmarks" sidebar section with a 🔖 icon
    • Right-click a bookmark for: Cherry-pick, Reset (Soft/Mixed/Hard), Remove, Remove All
    • Bookmarks persist across sessions

Remote Links & Autolinks

  • Open on Remote: Open or copy links to the repository's hosting site (GitHub, GitLab, Gitea, Bitbucket Cloud, Bitbucket Server / Data Center, Azure DevOps)
    • Files: right-click a file → vGit → Open File on Remote, Copy Remote File Link (current branch) or Copy Remote File Permalink (pinned to the commit); the selected lines are included
    • Commits: Open Commit on Remote / Copy Commit Link in the History view's commit context menu, and Open on Remote in the revision hover
    • Branches: Open Branch on Remote, Copy Branch Link and Compare with Current Branch on Remote in the branch context menu of the History view sidebar
    • For self-hosted servers whose domain does not name the product, map the domain with gitStagingView.remoteProviders (see Remote Providers)
  • Autolinks: Issue keys, #123 references and URLs in commit messages become links in the History view (commit details and hover popup) and in the revision hover
    • #123 links to the issue of the remote's provider (GitLab also !123 merge requests; Azure DevOps work items and !123 pull requests; Bitbucket "pull request #123")
    • Add your issue tracker with gitStagingView.autolinks (see Autolinks)

Multi-Repository Support

  • Automatic detection of all Git repositories in workspace
  • Dropdown selector to switch between repositories
  • Repository-specific state tracking
  • Real-time branch, tag, and ahead/behind status
  • Separate Git Directory Support: Detect repositories initialized with --separate-git-dir
    • Configure repositoryScanDepth to scan nested folders
    • Use additionalRepositoryPaths to specify folders containing git repositories outside workspace folders

Performance & Architecture

  • Webpack-bundled extension and webview for fast loading
  • External CSS files and loading screen to prevent FOUC

File Management

  • Tree View: Files organized by folder structure
  • Click to Stage/Unstage: Single-click operation
  • Batch Operations:
    • Stage All / Unstage All (Eclipse-style colored arrow icons)
    • Collapse All / Expand All folders
  • Visual Status Indicators:
    • A - Added
    • M - Modified
    • D - Deleted
    • R - Renamed
    • U - Unmerged/Conflict
  • Eclipse-Style File Context Menus: Right-click any file in the vGit file lists (History view's Files tab, Quick Diff panel, staging panel) or in a vGit diff editor to access Eclipse EGit-style actions:
    • Open Working Tree Version / Open This Version / Open Previous Version (opens read-only revision content)
    • Check Out This Version (overwrites the working tree with the selected revision after a confirmation prompt)
    • Compare with Previous Version / Compare with Working Tree
    • Show Revision Information (opens the working-tree file and enables revision annotations)
    • Focus On This File (filters the History graph to commits touching this file)
    • Reveal in Explorer / Select All / Copy File Path / Copy All Paths
    • The diff editor exposes these actions via a new vGit Revision submenu in both the right-click and editor-tab menus (visible when the active document is a vGit revision)

Staging Panel (Bottom Panel)

  • Commit Message Area: Multi-line textarea with AI-generate button (bottom-right)
  • Actions Row: Commit + Amend + Push + Force buttons with repository dropdown
  • Push Button: Dynamically shows remote name (e.g., "Push to origin")
  • Repository Dropdown: Shows remote in parenthesis (e.g., "my-repo (origin)")
  • Fetch/Pull Buttons: Quick access to fetch and pull operations
  • Git Flow Animation: Visual workflow indicator (Working Directory → Index → Local → Remote)
  • Branch Display: Current branch name with ahead/behind status

Git Operations

  • Commit: Commit staged changes with message validation
  • Amend Commit: Checkbox to amend the last commit with new changes and/or message
  • Reword Commit: Edit the message of the most recent commit
    • Right-click the HEAD commit in the graph
    • Select "Reword Commit Message"
    • Edit the message in the modal dialog
    • Auto-selects existing text for quick editing
    • Only works on HEAD commit for safety
  • Squash Commits: Combine multiple commits into one
    • Select contiguous commits using checkboxes (must include HEAD)
    • Right-click and choose "Squash Selected Commits"
    • Confirm the selection
    • Edit the combined commit message in the modal
    • Creates a single commit with all changes
    • Must start from HEAD for safety
  • Push: Push commits to remote with formatted response modal
    • Remote selection dropdown when multiple remotes are configured
    • Force Push checkbox for explicit git push --force (unchecked by default)
    • Smart credential prompting for remotes requiring authentication
    • Response displayed in modal with clickable URLs (e.g., pull request links)
    • Color-coded messages and hints section
    • Automatically refreshes view after successful push
  • Fetch: Fetch updates from remote with remote selection
    • "Git: Fetch" for quick fetch from default remote
    • "Git: Fetch (with options)" for remote selection dropdown
    • Fetches all branches from selected remote
  • Pull: Pull with remote and branch selection
    • Auto-stash support for uncommitted changes
    • Automatically stashes and restores local changes during pull
  • Refresh View: Manually refresh all repository data
  • Compare Operations:
    • Compare with HEAD
    • Compare with previous revision
    • Compare with any branch, tag, or reference
    • Compare with specific commit
  • Replace Operations:
    • Replace with HEAD revision
    • Replace with previous revision
    • Replace with any branch, tag, or reference
    • Replace with specific commit
  • Repository Operations:
    • Switch to branch/tag/commit
    • Create new branch from branch/commit
    • Rebase onto branch
    • Create tag (lightweight or annotated)
    • Fetch
    • Pull / Pull (force)
    • Reset
    • Rebase
    • Merge
  • Rebase Conflict Handling: Automatic conflict detection and resolution workflow
    • View automatically refreshes when conflicts are detected
    • Conflicted files appear immediately in Unstaged Changes section
    • Action buttons (Continue Rebase, Abort Rebase, Skip Commit) for resolving conflicts
  • Cherry-Pick Conflict Handling: Same conflict resolution workflow for cherry-pick operations
    • Detects when a cherry-pick encounters conflicts
    • Action buttons (Continue, Skip, Abort) for resolving cherry-pick conflicts
    • Consistent user experience across rebase and cherry-pick operations
  • Stash Management: Complete stash workflow support
    • Stash Changes: Save uncommitted changes with optional message
    • Pop Stash: Apply and remove the most recent stash
    • Apply Stash: Apply stash without removing it
    • Drop Stash: Delete a specific stash entry
    • View Stash: Preview stash contents in diff view
    • Stashes Panel: Dedicated panel to the right of Staged changes, toggled via the ⬒ button in the Staged header
      • Each stash is a card with its message, originating branch, relative age ("2 h ago", exact date in the tooltip), number of changed files and its stash@{n} reference. Stashes created without a message show the commit subject with a WIP tag
      • Hover a stash for the Pop, Apply and Drop buttons. Dropping asks for confirmation (gitStagingView.confirmStashDrop)
      • Click a stash to show its files: file name first, folder after it. Click a file to compare the stashed version with HEAD (added files: with the working tree); the hover buttons compare with the working tree or restore that single file from the stash
      • Right-click a stash for Create Branch from Stash (git stash branch, useful when a pop would conflict) and Rename
      • Keyboard navigation (see Keyboard Shortcuts) and a filter box once there are more than 5 stashes
      • A newly created stash is briefly highlighted
      • Badge on the toggle button shows the stash count when stashes exist
      • Resizable via drag handle between Staged and Stashes panels
    • Drag and Drop to Stash: Drag files or folders from the Unstaged view onto the Stashes panel
      • Drop on empty area to create a new stash with the selected files
      • Drop on an existing stash entry to add the files to that stash
    • Stash from Context Menu: Right-click unstaged files to stash directly with options
  • Quick Diff Panel: View all files changed on the current branch compared to its parent branch
    • Toggled via the ⇋ button in the Staged section header
    • Compares the current branch against its upstream tracking branch (falls back to origin/main, origin/master, or origin/develop)
    • Files displayed in a collapsible tree view with status indicators (M, A, D, R)
    • Double-click a file to open a diff comparing the merge-base version with the working tree version
    • Resizable panel positioned to the right of the Stashes panel
    • Badge on the toggle button shows the file count
  • Remote Management: Full CRUD operations for Git remotes
    • View all remotes with their URLs
    • Add, rename, change URL, or remove remotes
    • Command Palette: "Git: Manage Remotes..."
  • Refresh Repository Lists: Manually refresh dropdown lists when needed
    • Command Palette: "Git: Refresh Repository Lists"
    • Updates remote lists, repository lists, and all cached data
  • File/Folder History: View commit history filtered to a specific file or folder
    • Right-click any file or folder in Explorer → Team → "vGit: Show File History"
    • Opens staging view with commit graph filtered to the selected path
    • Works with both individual files and entire folders
  • Enhanced Error Display: Push and revert errors shown in formatted modal with hints

Git Configuration Editor

  • Dedicated Configuration Panel: Full-featured webview for viewing and editing Git configuration
    • Open via Command Palette: "vGit: Git Configuration"
    • Scope Tabs: Switch between Local, Global, and System configuration scopes
    • Inline Editing: Click any value to edit it in place
    • Add Entries: Add new configuration keys with the "+ Add Entry" button
    • Delete Entries: Remove configuration keys with per-row action buttons
    • Filter: Quickly search for settings by key name
    • Open Raw File: Open the underlying config file directly in the VS Code editor
    • System scope is displayed as read-only for safety (may require elevated privileges)

Branch Switcher Panel

  • Multi-Repository Branch Switching: Switch branches across multiple repositories in a single action
    • Toggle via the ⑂ button in the Staged section header
    • Lists all workspace repositories with their current branch, number of uncommitted changes (●) and commits to push/pull (↑/↓)
    • Click a row to select it, shift-click to select a range; submodules are listed under their parent repository
    • Switch to: Pick from branches common to all selected repositories, with a filter input for quick search
    • Create new: Create a new branch with the same name in all selected repositories (press Enter to create)
    • Each selected row previews its target (→ branch, or ✓ when already on it); the Switch button says what it will do (e.g. "Switch 3 repos") and stays disabled until a repository and a branch are chosen
    • After a switch, pull or push, each row shows ✓ or ✗ with the error message
    • Pull / Push: Pull or push all selected repositories
    • Select All / Unselect All: One-click buttons to change the repository selection
    • Repositories with uncommitted changes can be switched; Git carries non-conflicting changes over and conflicts are reported on the row
    • Resizable panel with drag handle, positioned to the right of the Quick Diff panel

Performance

  • Efficient Graph Rendering: Handles 500+ commits smoothly
  • Smart Lane Calculation: Optimized algorithm for clean graph layout
  • Incremental Loading: Loads 100 more commits per scroll
  • Git-Level Filtering: Efficient remote commit exclusion
  • Smart Refresh: File watcher distinguishes history vs. staging events — operations like staging, unstaging, and stashing no longer trigger unnecessary git log calls

Usage

Opening the Staging View

Command Palette (Ctrl+Shift+P):

vGit: Show Staging View

Keyboard Shortcut (when Explorer is focused):

Ctrl+Shift+G S

Context Menu:

  • Right-click any file in Explorer → vGit submenu

Working with Files

  1. Staging Files:

    • Click any file in Unstaged Changes to stage it
    • Or use Stage All button
  2. Unstaging Files:

    • Click any file in Staged Changes to unstage it
    • Or use Unstage All button
  3. Comparing Files:

    • Right-click a file → vGit → Compare with...
    • Choose HEAD, previous revision, reference, or specific commit
  4. Replacing File Content:

    • Right-click a file → vGit → Replace with...
    • Reverts file to selected revision

Using the Commit Graph

  1. Navigation:

    • Scroll to view commit history
    • Automatically loads more commits at bottom
    • Use search box to find specific commits
  2. Branch Visibility:

    • Click Show All Branches to see all branches
    • Check Hide Remote Commits to exclude remote tracking branches (default)
  3. Commit Operations:

    • Right-click any commit for context menu
    • Squash Selected Commits: Combine multiple commits (requires 2+ selected)
      • Check boxes next to commits you want to squash
      • Must include HEAD (the topmost commit)
      • Commits must be contiguous (adjacent in history)
      • Confirm selection, then edit the combined message in a modal
    • Reword Commit Message: Edit the most recent commit's message
      • Only available for HEAD commit
      • Opens modal dialog with existing message auto-selected
      • Edit and save to update the commit
    • Compare with...: Compare the commit with a local or remote branch, a tag, or a commit hash you type
      • The changed files open in the compare panel; double-click a file to see its diff
    • Cherry-Pick: Apply commit to current branch
    • Reset: Move branch pointer (soft/mixed/hard)
    • Revert: Create new commit that undoes changes
    • Create Branch: Create new branch from commit
  4. Search:

    • Type in search box and press Enter
    • Searches: hash, short hash, message, refs, author
    • Click × to clear search

Committing Changes

  1. Enter commit message in the text area
  2. Amend Checkbox (optional):
    • Check to amend the last commit
    • Automatically loads the previous commit message
    • Combine new staged changes with the previous commit
  3. Commit button: Creates commit locally (or amends if checkbox is checked)

Pushing Changes

  1. Push button: Push commits to remote
    • Displays response in a formatted modal window
    • Shows remote messages with clickable URLs (pull request links)
    • Automatically refreshes view on success
  2. Force Push (use with caution):
    • Check the "Force Push" checkbox next to Push button
    • Required for git push --force operations
    • Prevents accidental force pushes

Repository Management

Repository Header Controls:

  • Repository dropdown: Switch between detected Git repositories
  • Refresh View: Manually refresh all data
  • Fetch: Fetch updates from remote and refresh view

For Files (right-click in Explorer):

  • vGit submenu with all file operations

For Folders (right-click repository root):

  • Switch to... (branch/tag/commit)
  • Fetch, Pull, Pull (force)
  • Reset, Rebase, Merge
  • Clean Untracked Files and Folders (-fd) with dry-run preview and confirmation
  • Run Git Garbage Collection (gc) with confirmation

Resolving Rebase Conflicts

When a rebase encounters conflicts:

  1. Automatic Detection:

    • View automatically opens and displays rebase indicator
    • Conflicted files appear in Unstaged Changes with conflict markers (U)
    • View refreshes automatically to show all conflict files
  2. Resolve Conflicts:

    • Click conflicted files to open and edit them
    • Resolve conflicts by choosing which changes to keep
    • Stage the resolved files (click to move to Staged Changes)
  3. Complete Rebase:

    • Continue Rebase: Once all conflicts are resolved and staged, click to continue
    • Skip Commit: Skip the current commit that caused conflicts
    • Abort Rebase: Cancel the rebase and return to original state

The view monitors Git's rebase state files and updates automatically throughout the process.

Resolving Cherry-Pick Conflicts

When a cherry-pick encounters conflicts, the same workflow applies:

  1. Automatic Detection:

    • View displays a cherry-pick indicator (🍒 CHERRY-PICK IN PROGRESS)
    • Conflicted files appear in Unstaged Changes with conflict markers (U)
  2. Resolve Conflicts:

    • Edit conflicted files to resolve the conflicts
    • Stage the resolved files
  3. Complete Cherry-Pick:

    • Continue: Once all conflicts are resolved and staged, click to continue
    • Skip: Skip the current commit
    • Abort: Cancel the cherry-pick and return to original state

Resolving Stash Conflicts

When applying or popping a stash conflicts with your working tree, the conflicted files appear in Unstaged Changes (U). Right-click a conflicted file to resolve it:

  • Mark as Resolved: stage the file as it is in the working tree after you edited it (asks for confirmation if conflict markers remain)
  • Replace with Ours: keep the version from HEAD
  • Replace with Theirs: keep the stashed version

A stash that fails to pop because of conflicts stays in the stash list. Drop it once the conflicts are resolved.

Viewing File/Folder History

  1. Right-click any file or folder in the Explorer
  2. Select Team → vGit: Show File History
  3. The staging view opens with the commit graph filtered to only show commits that affected the selected file or folder
  4. All standard graph features remain available (search, branch views, context menus)

Viewing Revision Information

  1. Open a tracked file in the editor.
  2. Run vGit: Toggle Revision Information from the editor context menu or Command Palette.
  3. Review the revision column beside the code: each commit block shows short hash, author, and date, and the colored bar shows its age (warm = recent, cool = old). Lines of the commit under the cursor are highlighted. Hover an entry to open the commit in the History view.

Use vGit: Show Revision Information and vGit: Hide Revision Information when an explicit action is more convenient than toggling.

Without the column, the revision of the current line is shown at its end and in the status bar. Hover it to see the full commit message and the change that introduced the line; Open Changes opens that commit's diff of the file at this line. Use vGit: Toggle Current Line Revision Information (or gitStagingView.revisionInfo.inlineEnabled) to turn the end-of-line annotation on or off, and gitStagingView.revisionInfo.statusBarEnabled for the status bar entry.

Graph Visualization Details

Color Scheme

  • Blue (#3b82f6) - Primary branch
  • Green (#10b981) - Feature branches
  • Orange (#f59e0b) - Warning/HEAD commits
  • Red (#ef4444) - Hotfix branches
  • Purple (#8b5cf6) - Release branches
  • Pink (#ec4899) - Experimental branches

Layout

  • Row Height: 24px per commit
  • Column Width: 16px per lane
  • Commit Hash: 65px fixed width
  • Author Column: 110px fixed width
  • Date Column: 85px right-aligned

Features

  • Curved lines for merge commits
  • Continuous lanes through commit list
  • Branch lanes sorted by usage (longest left)
  • Visual distinction for HEAD commits (orange dot)

Ref Badges

  • HEAD: Green badge for current HEAD pointer
  • Local Branches: Blue badges for local branch names
  • Remote Branches: Cyan badges for remote tracking branches (hidden when "Hide Remote Commits" is checked)
  • Tags: Yellow badges (shown only when "Show Tags" is enabled)

Configuration

Settings

Setting Type Default Description
gitStagingView.showSubmodules boolean true Show git submodules in repository dropdown lists
gitStagingView.submoduleDisplayStyle string "hierarchical" How to display submodules: "hierarchical" or "grouped"
gitStagingView.repositoryScanDepth integer 1 Maximum depth to scan for git repositories (1-5)
gitStagingView.additionalRepositoryPaths array [] Additional folders to scan for git repositories
gitStagingView.favoriteBranches object {} Favorite branches per repository (managed via context menu)
gitStagingView.confirmStashDrop boolean true Ask for confirmation before dropping a stash from the Stashes panel
gitStagingView.enableCommandLogging boolean false Log Git commands started by vGit to the vGit Output channel for diagnostics
gitStagingView.revisionInfo.format string "hashAuthorDate" Inline message format: "hashAuthorDate", "authorDate", "authorMessage", or "hashAuthor"
gitStagingView.revisionInfo.dateFormat string "relative" Annotation date format: "relative", "short", or "iso"
gitStagingView.revisionInfo.inlineEnabled boolean true Show revision information at the end of the current line
gitStagingView.revisionInfo.hover string "annotation" Where the revision details hover appears: "annotation" (over the end-of-line annotation), "line" (anywhere on a line) or "off"
gitStagingView.revisionInfo.statusBarEnabled boolean true Show the current line's author and date in the status bar
gitStagingView.remoteProviders array [] Map self-hosted domains to a hosting provider for remote links, see Remote Providers
gitStagingView.autolinks array [] Turn issue keys in commit messages into links, see Autolinks

Autolinks

Autolinks turn references in commit messages, such as issue keys of your issue tracker, into clickable links. They appear in:

  • the History view sidebar, when you select a commit (the first line, and the full message when expanded with ▼);
  • the History view hover popup, in the commit details that load when you move the mouse into the popup;
  • the revision hover in the editor (the full commit message of the current line's commit).

Without any configuration, vGit already links:

  • plain http:// and https:// URLs;
  • #123 references of the repository's remote: GitHub and Gitea issues and pull requests, GitLab issues (and !123 merge requests), Azure DevOps work items (and !123 pull requests), and "pull request #123" on Bitbucket.

Add your own references with gitStagingView.autolinks, a list with one object per reference type:

Property Required Description
prefix yes Text right before the id, e.g. PROJ- or #
url yes Link target (http:// or https://); <num> is replaced by the id that follows the prefix
ignoreCase no Also match the prefix in other letter cases, e.g. proj-12 (default false)
alphanumeric no Allow letters in the id, not only digits, e.g. TICKET-a1b2 (default false)

Example: two Jira projects and a ticket system with alphanumeric ids:

"gitStagingView.autolinks": [
    { "prefix": "PROJ-", "url": "https://jira.example.com/browse/PROJ-<num>" },
    { "prefix": "OPS-", "url": "https://jira.example.com/browse/OPS-<num>" },
    { "prefix": "TICKET-", "url": "https://tickets.example.com/view/<num>", "ignoreCase": true, "alphanumeric": true }
]

With this, PROJ-42 Fix login (OPS-7) links PROJ-42 to https://jira.example.com/browse/PROJ-42 and OPS-7 to https://jira.example.com/browse/OPS-7.

Good to know:

  • Put each reference type in its own { … }. Several prefix/url pairs inside one object are not an error in JSON, but only the last pair is kept.
  • A reference must stand on its own: XPROJ-1 (prefix inside a longer word) and PROJ-12a (id followed by a letter, unless alphanumeric is set) are not linked.
  • Your rules take precedence over the built-in #123 links, so { "prefix": "#", "url": "https://tracker.example.com/issue/<num>" } sends #123 to your own tracker.
  • Rules whose url does not start with http:// or https:// are ignored.
  • Changes apply without reloading: select the commit again or open a new hover.
  • To share the rules with your team, put them in the repository's .vscode/settings.json instead of your user settings.

Remote Providers

The remote link commands (Open File on Remote, Open Commit on Remote, Open Branch on Remote, …) and the built-in #123 autolinks need to know which hosting software serves the repository. vGit reads the URL of the remote and detects:

  • github.com, gitlab.com, bitbucket.org, codeberg.org / gitea.com, dev.azure.com and *.visualstudio.com;
  • self-hosted servers whose domain contains github, gitlab, gitea/forgejo or bitbucket;
  • Bitbucket Server / Data Center remotes with /scm/ in the URL or on SSH port 7999.

For any other self-hosted server, map its domain with gitStagingView.remoteProviders:

"gitStagingView.remoteProviders": [
    { "domain": "git.example.com", "type": "bitbucketServer" },
    { "domain": "code.example.org", "type": "gitlab" }
]
type Hosting software
github GitHub, GitHub Enterprise Server
gitlab GitLab (gitlab.com or self-managed)
gitea Gitea, Forgejo
bitbucket Bitbucket Cloud
bitbucketServer Bitbucket Server / Data Center
azureDevOps Azure DevOps Services / Server

The domain also matches its subdomains (example.com matches git.example.com). Both HTTPS and SSH remote URLs work; links always open the web interface over HTTPS (or HTTP when the remote uses HTTP).

Which remote and which branch are used:

  • Remote: the default remote selected in vGit, otherwise the current branch's remote, otherwise origin, otherwise the first remote on a known provider.
  • Local branches are matched by name: feature/x links to feature/x on the remote it was pushed to, even when it tracks another branch (e.g. a feature branch created from origin/develop). A branch that is not on the remote yet shows a message instead of a broken link; fetch first if it was pushed from elsewhere.
  • Compare with Current Branch on Remote: compares the selected branch (what a pull request would bring) with the current branch; both must be on the remote. On the current branch itself, it compares the branch with the branch it tracks, e.g. feature/x created from origin/develop with develop, like the preview of a pull request.
  • Open File on Remote / Copy Remote File Link: the current branch on the remote, so the link follows the branch. If the branch is not published yet, the current commit is used.
  • Copy Remote File Permalink: always the current commit, so the link keeps pointing to the same content.
  • Commit links do not check whether the commit has been pushed; an unpushed commit opens a "not found" page.

Diagnostics: Git Command Output Log

When the extension feels unresponsive, you can see exactly which Git command it is waiting on:

  1. Enable gitStagingView.enableCommandLogging in Settings.
  2. Open View → Output (or run vGit: Show Output Log) and select vGit from the dropdown.
  3. Trigger the operation. Each command is logged with its lifecycle status (START / DONE / FAIL), the repository, the elapsed duration, and — on failure — the exit code and a short error summary.

The channel also records extension lifecycle events (activation, deactivation, repository and submodule discovery), which helps diagnose slow or stuck startups. Every Git process the extension starts is logged — including the commands run during repository, remote, and submodule discovery. Commit message bodies and temporary message-file paths are redacted from the log.

Separate Git Directory Support

For repositories created with git init --separate-git-dir, the .git folders are stored in a separate location from the working directories. This is common in enterprise environments where git repositories are organized in a dedicated folder structure.

Example workspace structure:

workspaceroot/
├── myproject.code-workspace
├── git/                          ← Contains .git directories
│   ├── framework/.git
│   ├── common/.git
│   └── application/.git
├── framework/                    ← Working directory (in .code-workspace)
├── common/                       ← Working directory (in .code-workspace)
└── application/                  ← Working directory (in .code-workspace)

Configuration for this setup:

{
    "gitStagingView.repositoryScanDepth": 1,
    "gitStagingView.additionalRepositoryPaths": ["git"]
}

How it works:

  • The extension scans only the workspace folders defined in your .code-workspace file
  • Additional paths are resolved relative to the workspace root (where the .code-workspace file is located)
  • Each additional path is scanned up to the configured repositoryScanDepth
  • Repositories discovered in additional paths appear in the repository dropdown

Session State

The following settings are maintained per session:

  • Panel resize ratio
  • Branch visibility preference
  • Remote commits visibility
  • Tag visibility preference
  • Commit message (persists when navigating away)
  • Current repository selection
  • Sidebar width
  • Force push preference (always defaults to unchecked for safety)

Requirements

  • Git: Must be installed and available in system PATH
  • VS Code: Version 1.74.0 or higher
  • Workspace: At least one Git repository

Keyboard Shortcuts

Shortcut Command Context
Ctrl+Shift+G S vGit: Show Staging View Explorer focused
↑ / ↓, Home / End Move between stashes Stashes panel
Enter / Space, → / ← Show / hide the files of a stash Stashes panel
P / A Pop / apply the focused stash Stashes panel
Del Drop the focused stash Stashes panel
F2 Rename the focused stash Stashes panel

Known Limitations

  • Graph rendering optimized for up to ~1000 commits
  • Context menu requires right-click (no keyboard access yet)

Tips & Tricks

  1. Quick Staging: Click files in tree view for fastest staging
  2. Batch Operations: Use collapse/expand for better tree navigation
  3. Search Efficiency: Search by short hash (7 chars) for quick commit lookup
  4. Panel Layout: Resize panels to focus on graph or file list as needed
  5. Remote Filtering: Keep "Hide Remote Commits" checked for cleaner local view
  6. Branch Selection: Use the branch panel sidebar to filter the graph to specific branches of interest
  7. Favorite Branches: Right-click branches you use often and add them to Favorites for quick access
  8. Branch Head Highlight: Select individual branches (not via group toggles) to see their HEAD commits highlighted in the graph
  9. Branch Navigation: Use commit graph context menu to create branches from any commit
  10. Safe Push: Always review the push response modal before closing it
  11. Force Push Safety: Force Push checkbox prevents accidental force pushes - only check when absolutely necessary
  12. Fetch Before Push: Use the Fetch button to update remote tracking before pushing
  13. Squash Commits: Clean up your commit history by squashing multiple related commits:
    • Select consecutive commits starting from HEAD using checkboxes
    • Right-click and choose "Squash Selected Commits"
    • Edit the combined message to create a clean, descriptive commit
    • Useful for combining "WIP" commits or cleanup commits before pushing
  14. Reword Commits: Quick fix for commit message typos:
    • Only works on the most recent commit (HEAD)
    • Right-click HEAD and select "Reword Commit Message"
    • The existing message is auto-selected for easy replacement
  15. Rebase Conflict Resolution: Handle rebase conflicts efficiently:
    • View automatically refreshes when conflicts are detected
    • Resolve conflicts in each file, then stage them
    • Use Continue/Skip/Abort buttons to proceed
    • The view monitors rebase state and updates in real-time
  16. Cherry-Pick Conflict Resolution: Same workflow as rebase - resolve, stage, then Continue/Skip/Abort
  17. File/Folder History: Right-click any file or folder → Team → vGit: Show File History to see filtered commit graph
  18. Safe Repository Clean: Right-click any file/folder → Team → vGit: Clean Untracked Files and Folders (-fd) to preview and remove untracked files/directories
  19. Repository Maintenance: Right-click any file/folder → Team → vGit: Run Git Garbage Collection (gc) to compact repository data
  20. Eclipse-Style Revision Actions: Right-click any file in the History Files tab, the Quick Diff panel, the staging panel, or a vGit diff editor to open/checkout/compare specific revisions, jump the graph focus to that file, or copy its path — all without leaving the current view

Other Extensions by diabolo-68

Check out my other VS Code extensions:

Extension Description
Apache Ant Manager Manage and run Apache Ant build tasks directly from VS Code
OE Manager GUI GUI for managing OpenEdge AppServer agents and connections
OpenEdge ABL Properties Enhanced property file support for OpenEdge ABL development
Bitbucket Manager Manage Bitbucket pull requests, branches, and repositories from VS Code

Enjoy a more powerful Git workflow in VS Code with vGit!

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft