Frequently asked questions and troubleshooting guide.
A change list is a named container that groups related uncommitted file changes together. Think of it as a way to organize your Git working directory into logical categories (features, bug fixes, experiments, etc.) instead of just "staged" and "unstaged".
Example:
📁 Feature: User Login (3 files)
- auth.ts
- login.tsx
- api/users.ts
📁 Bugfix: Validation (1 file)
- validators.ts
📁 Default (2 files)
- README.md
- package.json
Git staging is a binary state: files are either staged or unstaged. Change lists add a layer of organization on top of Git:
Git Staging:
- Staged: Ready to commit
- Unstaged: Not ready to commit
Change Lists:
- Organize unstaged files into logical groups
- Multiple groups can coexist
- Stage entire groups at once
- Commit groups separately
They work together:
- Organize files into change lists
- Stage a change list
- Commit the staged files
- Repeat for other change lists
Branches are for long-lived parallel work streams. Change lists are for organizing work within a branch.
Use branches when:
- Feature will take days or weeks
- Need to share work with team
- Want to isolate from main codebase
- Need to merge later
Use change lists when:
- Working on multiple small tasks simultaneously
- Need to commit different parts separately
- Organizing code review commits
- Trying experiments without branch overhead
Best Practice: Use both! Change lists organize commits within a branch.
Yes! Smart Commit is designed to work alongside other Git extensions:
Compatible with:
- GitLens (full compatibility)
- Git Graph (full compatibility)
- GitHub Pull Requests (full compatibility)
- GitKraken (via Git operations)
- Any extension using VS Code's Git API
Works with external tools:
- Command-line Git
- Git GUI clients
- Tower, SourceTree, GitKraken apps
- CI/CD systems
Smart Commit extends Git, it doesn't replace it.
No! Smart Commit only organizes your uncommitted changes. It doesn't:
- ❌ Modify commit history
- ❌ Alter
.gitdirectory (except standard operations like staging) - ❌ Change remote repository
- ❌ Affect collaboration with teammates
What it does:
- ✓ Organizes working directory files
- ✓ Uses standard Git commands (stage, commit)
- ✓ Stores organization metadata in VS Code's workspace storage
- ✓ Works invisibly to Git and other tools
Change list organization is stored in VS Code's workspace storage:
Storage Location:
- Scope: Per-workspace (not global, not in Git repo)
- Format: JSON in VS Code's internal SQLite database
- Path: Managed by VS Code, not directly accessible
What's stored:
- Change list names and IDs
- Which files belong to which lists
- Active list designation
- View mode and expansion state
What's NOT stored in Git:
- Change lists are local to your machine
- Not shared with teammates
- Not committed to repository
- Each developer has independent organization
Three methods:
1. Drag-and-Drop (Easiest)
- Click and hold a file
- Drag to destination change list
- Release when highlighted
2. Context Menu
- Right-click a file
- Select "Move to Change List"
- Choose destination
3. Multi-Select
- Select multiple files (Ctrl+Click)
- Right-click any selected file
- Move all at once
See USER_GUIDE.md for details.
Common causes:
-
No Git repository
- Solution: Initialize Git (
git init) or open a Git repo
- Solution: Initialize Git (
-
Files not modified
- Solution: Make a change, add a file, or modify existing files
-
Files in .gitignore
- Solution: Unignored files don't appear (expected behavior)
-
Git extension disabled
- Solution: Enable built-in Git extension
-
Extension not activated
- Solution: Check Output → Smart Commit for errors
Debug Steps:
- Check Git status:
git status - Enable debug logging:
smartCommit.debug.enableLogging: true - Check Output → Smart Commit
- Refresh manually (click refresh button)
Default List:
- Special system list
- Cannot be deleted (can be renamed)
- Captures unassigned changes
- Fallback for files without explicit assignment
Active List:
- User-designated list (can be any list, including Default)
- Receives newly detected changes automatically
- Only one list can be active at a time
- Marked with checkmark icon
- Shown in status bar
Example:
Active List: "Feature X"
When you modify a file:
→ File goes to "Feature X" (active)
When you stage a file externally:
→ File assigns to "Feature X" (if autoAssignStagedFiles is enabled)
Unassigned files:
→ Fall back to Default list
No, Smart Commit follows Git's standard workflow:
Workflow:
- Organize files into change lists (Smart Commit)
- Stage a change list (Smart Commit → Git staging area)
- Write commit message (VS Code Git UI)
- Commit staged files (Git)
Why?
- Staging is a Git concept, not a Smart Commit concept
- VS Code's commit UI expects staged files
- Compatible with all Git tools and workflows
The Default list is a system list that serves as a fallback:
Reasons:
- Ensures all changes are always visible
- Captures unassigned files
- Prevents "lost" changes
- Provides a starting point for organization
You can:
- Rename it to anything you like
- Move files out of it
- Set other lists as active (so new files bypass it)
You cannot:
- Delete it
- Remove its fallback behavior
Batch Operations:
1. Multi-Select
- Ctrl+Click: Toggle files one by one
- Shift+Click: Select range
- Ctrl+A: Select all in current list
- Right-click → Move to Change List
2. Create Lists First
- Plan your organization (Feature A, Bug B, Refactor C)
- Create all lists upfront
- Batch move files to each list
3. Use Active List
- Set "Feature A" as active
- Stage files related to Feature A externally (command line)
- They auto-assign to Feature A
- Switch to "Bug B" and repeat
Yes, with isolated state per workspace folder:
Current Support (v0.0.1):
- Each root has independent change lists
- Cannot move files between roots
- Each root's state is stored separately
Future Plans:
- Unified view across all roots
- Cross-repository change lists (if related)
Smart Commit detects external commits and cleans up automatically:
Example:
git add .
git commit -m "feat: Add feature"Smart Commit Response:
- Detects HEAD change (commit happened)
- Identifies which files were committed
- Removes those files from change lists
- Updates tree view
- Logs cleanup event
Result: Your change lists stay clean without manual intervention.
Yes! Full bidirectional compatibility:
CLI → Smart Commit:
git add file.ts→ Detects staging, assigns to active listgit commit→ Detects commit, cleans up change listsgit reset→ Detects unstaging, updates view
Smart Commit → CLI:
- Create/move files in UI → No effect on Git (organization only)
- Stage change list → Files visible in
git statusas staged - Commit via UI → Standard Git commit (visible in
git log)
Best of Both Worlds:
- Use GUI for organization
- Use CLI for commands you prefer
- No conflicts or sync issues
No. Change lists are local to your machine:
Not Shared:
- Change list names
- File assignments
- Active list designation
- View preferences
Shared (via Git):
- Commits (once you commit)
- Staged files (if you push staging area)
- Repository history
Collaboration:
- Each developer organizes independently
- Commits are the synchronization point
- No "change list sync" needed or desired
Symptoms: Change Lists view doesn't appear.
Solutions:
-
Open a Git repository
- Extension only activates with Git repos
- Run
git initor open existing repo
-
Check activation events
- View → Output → Select "Smart Commit"
- Look for activation errors
-
Restart VS Code
- Developer: Reload Window
- Or close and reopen
-
Verify Git extension is enabled
- Extensions → Search "Git"
- Built-in Git should be enabled
Already covered above. See Why aren't my files showing up?
Symptoms: Can commit mixed change lists without warning.
Solutions:
-
Enable guard
{ "smartCommit.commitGuard.enabled": true } -
Enable interception (optional but recommended)
{ "smartCommit.commitGuard.interceptCommit": true }Restart VS Code after enabling.
-
Use keybinding, not button
- Press
Ctrl+Enter/Cmd+Enter(guard intercepts this) - Or: Command Palette → "Smart Commit: Commit (with Guard)"
- Don't click native commit button (guard can't intercept it)
- Press
-
Check logs
- Output → Smart Commit
- Look for guard activation messages
Symptoms: No [Active List] indicator in status bar.
Solutions:
-
Enable status bar
{ "smartCommit.showStatusBar": true } -
Open a Git repository
- Status bar only appears with active repos
-
Check workspace
- Status bar is per-workspace setting
- Check workspace settings aren't overriding
Symptoms: Can't drag files between lists.
Solutions:
-
Use context menu instead
- Right-click → Move to Change List
- Drag-and-drop is optional convenience
-
Check for conflicts
- Another extension may interfere
- Disable other extensions temporarily to test
-
Restart VS Code
- Tree view controller may need refresh
Symptoms: Slow tree view updates, lag when switching views.
Solutions:
-
Use list mode
{ "smartCommit.defaultViewMode": "list" }- List mode has less overhead than tree mode
-
Disable debug logging
{ "smartCommit.debug.enableLogging": false }- Reduces log volume in Output channel
-
Organize aggressively
- Don't let change lists grow beyond 50 files
- Commit more frequently
- Create granular change lists
-
Upgrade hardware
- More RAM helps with large repos
- SSD improves Git operations
Symptoms: Changed settings but behavior unchanged.
Solutions:
-
Check setting scope
- Workspace settings override user settings
- Check both User and Workspace settings
-
Restart VS Code (for some settings)
commitGuard.interceptCommitrequires restart- View mode changes are immediate
-
Verify JSON syntax
- Invalid JSON causes settings to be ignored
- Check for syntax errors in
settings.json
-
Clear and re-apply
- Remove setting entirely
- Reload VS Code
- Re-add setting
Minimum: 1.103.0 Tested: 1.103.0+ Recommended: Latest stable
Version Check:
- Help → About → Version number
- Update: Help → Check for Updates
Yes! Full cross-platform support:
Tested On:
- Windows 10/11
- macOS 12+ (Monterey, Ventura, Sonoma)
- Linux (Ubuntu, Fedora, Arch)
Platform-specific notes:
- Keybindings adapt (Ctrl vs Cmd)
- File paths handled correctly (\ vs /)
- No platform-specific bugs known
See INSTALLATION.md for full list:
- Visual Studio Code ✓
- Cursor ✓
- Kiro ✓
- Windsurf ✓
- Trae ✓
- VSCodium ✓
- Google Antigravity ✓
All editors based on VS Code's Extension API are compatible.
Yes! Smart Commit works with remote development:
Setup:
- Install Remote - WSL extension
- Connect to WSL
- Install Smart Commit in WSL (not Windows)
- Open Git repo in WSL
Note: Extension must be installed in remote environment, not local Windows.
Same applies to:
- Remote - SSH
- Remote - Containers
- GitHub Codespaces
Yes! Install Smart Commit in the Codespace:
- Open Codespace
- Extensions → Search "Smart Commit"
- Install
- Works identical to local VS Code
- Check Documentation: README.md, USER_GUIDE.md, FEATURES.md
- Search Issues: GitHub Issues
- Ask Community: GitHub Discussions
- Report Bug: Open an Issue
Tip: Enable debug logging when troubleshooting! See DEBUGGING.md for details.