Git Worklists

Git Worklists is a Visual Studio Code extension that provides a lightweight, Git-focused workflow for organizing changes, staging files, committing, and managing stashes - all through a custom UI.
It is designed for developers who want explicit control over staging, commits, and stash workflows, without relying on VS Code’s built-in Source Control view.
Demo

Features
Changelists 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 no longer 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
Visual file decorations (badges)
Click files to open instantly
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
- Keep Unversioned
- Disable prompt
Safe behavior when staging / unstaging newly created files
Newly added (staged) files require confirmation before permanent deletion
All staging state reflects the actual Git index.
Commit Panel
A focused commit experience separate from VS Code SCM.
- Custom Commit Message field
- Amend support with safe handling
- Commit and Commit & Push
- Live staged file counter
- Clear and actionable error feedback
- Safe confirmation before force-with-lease push
- Automatic upstream setup for new local branches
Commit behavior is predictable and aligned with Git CLI behavior.
Stash Management
Integrated Git stash support directly inside Git Worklists.
Create Stash (Per Changelist)
- 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
Stash List View
- 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
Stash Actions
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
Git Integration
Uses Git CLI directly (no VS Code SCM provider).
Supported operations:
git add
git restore --staged
git commit
git commit --amend
git push
git stash push
git stash list
git stash apply
git stash pop
git stash drop
git ls-files --others --exclude-standard
All operations are executed per repository using repo-relative paths.
Requirements
- Git installed and available in PATH
- Workspace opened inside a Git repository
- VS Code v1.108.0 or newer
Usage
Changelists & Commits
- 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 or Commit & Push
Stashes
- Right-click a changelist -> Stash changes…
- Enter an optional stash message
- Open the Stashes view
- Apply, Pop, or Delete stashes as needed
Extension Settings
This extension contributes the following setting:
gitWorklists.promptOnNewFile
- Type: boolean
- Default:
true
- When enabled, shows a prompt when new files are created:
- Add to Git
- Keep Unversioned
- Disable prompt
Known Limitations
- 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
Roadmap
Planned improvements:
- Include-untracked option for stash
- Multi-repository support
- Partial staging (hunk-based)
- Improved visual polish
- Extended test coverage
- Performance optimizations
Release Notes
0.0.4
Added
- Optional “Add to Git?” prompt on new file creation
- Setting to enable/disable new-file prompt
Fixed
- Discard now confirms before deleting newly added staged files
0.0.3
Added
- Worklist file-count badge in Changelists view
- Extended unit test coverage
- Improved internal testability through refactoring
Fixed
- Unversioned files now detected via
git ls-files --others --exclude-standard
- Untracked directories are no longer displayed as placeholder entries
- Files now display in Source Control style (filename + folder description)
- Improved reconciliation behavior for untracked vs tracked changes
0.0.2
Added
- Discard action for files directly from the Changelists view
Fixed
- Correct staged file detection (UI now accurately reflects Git index state)
- Automatic upstream setup when pushing new local branches
- Improved amend behavior when commit would otherwise be empty
0.0.1
Added
- Changelists view
- Custom commit panel
- Git staging, commit, amend, push support
- Per-changelist stash creation
- Dedicated Stashes view
- Apply / Pop / Delete stash actions
- Move files between changelists
- Move group to changelist
- Move selected files to changelist
- Improved reconciliation with Git status
- Clean stash label formatting
- Context menu + icon actions
- Error handling improvements
Development Philosophy
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. 🚀