| name | git-switch |
| description | Switch branches safely with uncommitted change handling Use when this capability is needed. |
| metadata | {"author":"dtsong"} |
/git-switch - Switch Branches Safely
Switch to a different branch with smart handling of uncommitted changes.
Usage
/git-switch main
/git-switch feat/dark-mode
/git-switch -
/git-switch --create feat/new
Workflow
Step 1: Check for Uncommitted Changes
HAS_CHANGES=false
if ! git diff --quiet || ! git diff --cached --quiet; then
HAS_CHANGES=true
fi
UNTRACKED=$(git ls-files --others --exclude-standard | wc -l)
Step 2: Handle Uncommitted Changes
If changes exist, present options:
if [ "$HAS_CHANGES" = true ]; then
echo "You have uncommitted changes:"
git status --short
fi
Step 3: Verify Target Branch Exists
TARGET_BRANCH="$1"
if git show-ref --verify --quiet "refs/heads/$TARGET_BRANCH"; then
echo "Switching to local branch: $TARGET_BRANCH"
elif git show-ref --verify --quiet "refs/remotes/origin/$TARGET_BRANCH"; then
echo "Creating local tracking branch from origin/$TARGET_BRANCH"
git checkout -b "$TARGET_BRANCH" "origin/$TARGET_BRANCH"
exit 0
else
echo "Branch '$TARGET_BRANCH' not found locally or on origin."
echo "Did you mean to create it? Use: /git-branch $TARGET_BRANCH"
exit 1
fi
Step 4: Execute Switch
git switch "$TARGET_BRANCH"
git switch "$TARGET_BRANCH"
git switch -
Step 5: Post-Switch Status
git status -sb
if [ "$DID_STASH" = true ]; then
echo "Stashed changes are available. Restore with: /git-stash pop"
fi
Output Format
Clean Switch
Switched to branch: feat/dark-mode
Branch status:
Tracking: origin/feat/dark-mode
Behind: 0 commits
Ahead: 2 commits
Recent commits on this branch:
abc1234 Add theme toggle
def5678 Wire up context
Switch with Stash
Uncommitted changes detected:
M src/components/Header.tsx
A src/styles/new.css
Changes stashed automatically.
Switched to branch: main
To restore your changes:
/git-stash pop
Or keep them stashed:
/git-stash list
Switch with Carried Changes
Switched to branch: feat/dark-mode
Uncommitted changes carried over:
M src/components/Header.tsx
These changes are now on feat/dark-mode (not committed).
Switch Failed - Would Overwrite
Cannot switch to main!
Your local changes to these files would be overwritten:
- src/components/Header.tsx
Options:
/git-stash # Stash changes first
/commit # Commit changes first
git checkout -- <file> # Discard specific changes
Special Shortcuts
| Command | Description |
|---|
/git-switch - | Switch to previous branch |
/git-switch main | Switch to main branch |
/git-switch --create name | Create new branch and switch |
Tab Completion Helper
When branch name is partial or ambiguous, show matches:
Multiple branches match 'feat/':
feat/dark-mode
feat/user-auth
feat/api-v2
Specify full name to switch.
Integration
- Use
/git-branches to see all available branches
- Use
/git-stash for manual stash control
- Use
/git-branch to create new branches
- Use
/git-sync after switching to check for updates
Converted and distributed by TomeVault — claim your Tome and manage your conversions.