Git Worklists is a Visual Studio Code extension that provides a lightweight, Git-focused workflow for organizing changes, staging files, committing, pushing, and managing stashes, all through a dedicated, predictable UI.
It is designed for developers who want explicit control over staging, commits, amend, push, and stash workflows, without relying on VS Code’s built-in Source Control view.
A structured way to organize and stage changes.
-
Displays Changes and Unversioned files clearly
-
Shows file count badges per worklist
-
Unversioned files are detected via
git ls-files --others --exclude-standard -
Untracked directories are not shown as placeholder entries
-
Files are displayed in Source Control style:
- File name as primary label
- Folder path shown as description
-
Create, move, and delete custom changelists
-
Move files between changelists (per file or per group)
-
Move selected files to another changelist
-
File-level and group-level checkboxes for staging / unstaging
-
State-aware inline action:
- Shows Stage when file is unstaged
- Shows Unstage when file is staged
-
Stage All / Unstage All per changelist
-
Visual file decorations (badges)
-
Decorations are automatically refreshed after commit or push (no stale indicators)
-
File context menu actions:
- Open Diff (HEAD <-> Working Tree)
- Open Source File (jump directly to the working tree file)
- Discard
- Move to Changelist
-
Click a file row to open a HEAD <-> Working Tree diff
-
Clicking a file does NOT change staging state
-
Diff view works correctly for:
- Initial commit (no parent commit)
- Newly added files
- Renamed files
- Missing parent references
-
Dedicated Close Diff Tabs button in the view title
-
Optional automatic closing of diff tabs after:
- Commit
- Push
-
Automatic reconciliation with Git status
-
Files move automatically between:
- Unversioned when newly created
- Changes when tracked / modified
-
Optional prompt when new files are created:
- Add to Git (stages file and moves it to Changes)
- Keep Unversioned
- Disable prompt
-
Safe behavior when staging / unstaging newly created files
-
Newly added (staged) files require confirmation before permanent deletion
-
Changelist-level Discard All Changes action:
- Categorized confirmation (unversioned / newly added / tracked)
- Safe bulk restore using
git restore - Permanent deletion confirmation for unversioned files
All staging state reflects the actual Git index.
A focused commit experience separate from VS Code SCM.
-
Custom Commit Message field
-
Commit message draft is automatically preserved
-
Live staged file counter
-
Inline warning when attempting to commit with no staged files
-
Amend support
- Supports message-only amend (no staged files required)
- Handles empty-amend edge cases safely
- Amend checkbox automatically resets after a successful commit or commit & push
-
Commit
-
Commit & Push
-
Push-only support (push existing local commits even if nothing is staged)
-
Safe confirmation before force-with-lease push
-
Automatic upstream setup for new local branches
-
Push preview panel when multiple outgoing commits exist:
- Shows commit hashes and subjects before pushing
- Requires explicit confirmation
-
Clear and actionable error feedback
Commit behavior is predictable and aligned with Git CLI behavior.
Integrated Git stash support directly inside Git Worklists.
- Stash all tracked changes from a selected changelist
- Automatically tags stashes with their originating changelist
- Optional custom stash message
- Safe handling of untracked files (skipped unless explicitly supported)
- Immediate UI refresh after stash
- Dedicated Stashes view
- Clean, readable labels (no raw
stash@{0}noise) - Displays originating changelist (e.g.
[CL:changes]) - Shows branch context
- Hover tooltip includes full Git reference
Per-stash context actions:
- Apply Stash – restore changes without removing stash
- Pop Stash – restore changes and remove stash
- Delete Stash – drop stash with confirmation
- Refresh support
Uses Git CLI directly (no VS Code SCM provider).
Supported operations:
git addgit restore --stagedgit restore --staged --worktreegit commitgit commit --amendgit pushgit push --force-with-leasegit stash pushgit stash listgit stash applygit stash popgit stash dropgit ls-files --others --exclude-standard
All operations are executed per repository using repo-relative paths.
- Git installed and available in PATH
- Workspace opened inside a Git repository
- VS Code v1.109.0 or newer
- Open a Git repository in VS Code
- Open Git Worklists from the Activity Bar
- Stage or unstage files using checkboxes
- Organize files into custom changelists
- Enter a commit message
- (Optional) enable Amend
- Click:
- Commit
- Commit & Push
- Or push existing commits without staging new changes
- Right-click a changelist -> Stash changes…
- Enter an optional stash message
- Open the Stashes view
- Apply, Pop, or Delete stashes as needed
This extension contributes the following settings:
- Type: boolean
- Default:
true - Shows a prompt when new files are created:
- Add to Git
- Keep Unversioned
- Disable prompt
- Type: boolean
- Default:
false - Automatically closes diff tabs opened by Git Worklists after a successful commit.
- Type: boolean
- Default:
false - Automatically closes diff tabs opened by Git Worklists after a successful push.
- No partial staging (no hunk / line staging)
- No multi-repository support
- Merge conflicts must be resolved manually
- Untracked files are not included in per-changelist stash by default
- GitHub / GitLab PR features are not included
Planned improvements:
- Include untracked files when creating stash
- Improve refresh performance for large repositories
- UI/UX refinements for changelist view
See full changelog in CHANGELOG.md
Git Worklists intentionally avoids VS Code’s built-in SCM provider.
Instead, it builds a focused, predictable workflow using:
- Tree Views
- Commit UI
- Git CLI
The goal is clarity, explicit control, and zero hidden magic.
Git Worklists - focused Git workflows without surprises. 🚀
