📚 StashMe - Real-World Examples¶
Practical examples for common scenarios using StashMe.
Table of Contents¶
- Daily Workflows
- Emergency Scenarios
- Machine Migration
- Team Collaboration
- CI/CD Integration
- Advanced Usage
Daily Workflows¶
End of Day Backup¶
Save all your work at the end of the day:
# Quick backup with descriptive message
./stashme.sh -m "EOD: $(date +%A) work in progress"
# Example output:
# ═══════════════════════════════════════════════════════════════
# StashMe - Multi-Repository Cloud Stash Utility v1.0.0
# ═══════════════════════════════════════════════════════════════
#
# Base directory: /Users/developer/github
# Branch name: stashme/2026-02-03-180000
# Dry run: false
# Push to remote: true
#
# [STEP] Searching for git repositories in: /Users/developer/github
# [INFO] Found 12 git repositories
#
# [REPO] Processing: webapp (/Users/developer/github/webapp)
# [INFO] Found 5 changed file(s)
# [SUCCESS] Pushed to origin/stashme/2026-02-03-180000
# ...
Morning Review¶
Check what you were working on:
./stashme.sh --list --verbose
# Output shows all repos with pending changes:
# [REPO] webapp (/Users/developer/github/webapp)
# 📁 webapp: 5 file(s) changed
# M src/components/Header.tsx
# M src/pages/Dashboard.tsx
# M tests/Header.test.tsx
# ?? src/components/NewFeature.tsx
# ?? docs/feature-spec.md
Weekly Cleanup¶
Remove old backup branches:
./stashme.sh --cleanup --interactive
# Prompts for each repo:
# [REPO] webapp
# [INFO] Local stashme branches:
# stashme/2026-01-27-180000
# stashme/2026-01-28-180000
# stashme/2026-01-29-180000
# Delete local stashme branches? [Y/n]:
Emergency Scenarios¶
Laptop About to Die¶
Quick backup when battery is critical:
System Update Pending¶
Save everything before a major update:
./stashme.sh \
-m "Pre-update backup: $(sw_vers -productVersion)" \
--summary ~/Desktop/pre-update-backup.txt \
--force
Unexpected Machine Issues¶
When you need to switch machines urgently:
# Save with detailed tracking
./stashme.sh \
--suffix emergency \
-m "Emergency backup - machine issues" \
--summary emergency-manifest.txt
# Creates branches like: stashme/2026-02-03-143021-emergency
Machine Migration¶
Step 1: Backup on Old Machine¶
# Create comprehensive backup
./stashme.sh \
--dir ~ \
--max-depth 5 \
-m "Machine migration: $(hostname)" \
--summary ~/Desktop/migration-manifest.txt
# Review the manifest
cat ~/Desktop/migration-manifest.txt
Step 2: Clone Repos on New Machine¶
Step 3: Restore on New Machine¶
# After cloning repos, restore stashed work
./stashme.sh --restore --interactive
# For each repo:
# [REPO] webapp has stashme branches:
# stashme/2026-02-03-143021
# origin/stashme/2026-02-03-143021
# Restore most recent stashme branch? [y/N]: y
# [INFO] Checking out: stashme/2026-02-03-143021
Step 4: Merge Changes Back¶
# Manually merge stashed changes into your working branch
cd ~/github/webapp
git checkout main
git merge stashme/2026-02-03-143021
# Or cherry-pick specific commits
git cherry-pick stashme/2026-02-03-143021
Team Collaboration¶
Sharing WIP with Colleague¶
# Create named branch for sharing
./stashme.sh \
--branch wip/feature-auth-handoff \
-m "WIP: Auth feature handoff to @colleague"
# Colleague can then:
# git fetch origin
# git checkout wip/feature-auth-handoff
Code Review Checkpoint¶
# Save current state before making review changes
./stashme.sh \
--suffix pre-review \
-m "State before code review changes"
Sprint End Backup¶
# Backup all team members' work
./stashme.sh \
--suffix sprint-42 \
-m "Sprint 42 end - WIP backup" \
--summary reports/sprint-42-wip.txt
CI/CD Integration¶
Pre-Deploy Backup Script¶
#!/bin/bash
# pre-deploy-backup.sh
echo "Creating pre-deploy backup..."
./stashme.sh \
--dir /home/deploy/projects \
--suffix "pre-deploy-$(date +%Y%m%d-%H%M)" \
-m "Pre-deploy backup: $DEPLOY_VERSION" \
--summary /var/log/deploy-backups/$(date +%Y%m%d).txt \
--quiet
if [ $? -eq 0 ]; then
echo "Backup successful"
else
echo "Backup had issues, check logs"
fi
Scheduled Backup (Cron)¶
# Add to crontab
# Daily at 6 PM
0 18 * * * /usr/local/bin/stashme.sh -q --summary /var/log/stashme/daily-$(date +\%Y\%m\%d).txt
# Weekly cleanup on Sundays
0 10 * * 0 /usr/local/bin/stashme.sh --cleanup -q
GitHub Actions Integration¶
# .github/workflows/backup-wip.yml
name: Backup Work in Progress
on:
schedule:
- cron: '0 18 * * *' # Daily at 6 PM UTC
workflow_dispatch:
jobs:
backup:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run StashMe
run: |
./scripts/STASHME/stashme.sh \
--suffix "ci-backup" \
-m "Automated CI backup" \
--dry-run # Remove for actual backup
Advanced Usage¶
Custom Directory Structure¶
# Backup only frontend projects
./stashme.sh ~/projects/frontend --prefix frontend-wip
# Backup only backend projects
./stashme.sh ~/projects/backend --prefix backend-wip
# Backup personal vs work separately
./stashme.sh ~/personal --prefix personal
./stashme.sh ~/work --prefix work
Filtered Backup with Verbose Output¶
./stashme.sh \
--verbose \
--max-depth 2 \
--include-hidden \
~/development
# Shows detailed information:
# [DEBUG] Found repo: /Users/dev/development/project-a
# [DEBUG] Found repo: /Users/dev/development/.dotfiles
# [DEBUG] Current branch: main
# [DEBUG] Creating branch: stashme/2026-02-03-143021
# [DEBUG] Adding all changes...
# [DEBUG] Committing changes...
# [DEBUG] Returning to original branch: main
# [DEBUG] Pushing: git push origin stashme/2026-02-03-143021
Conditional Backup Script¶
#!/bin/bash
# smart-backup.sh
# Only backup if there are actually changes
CHANGES=$(./stashme.sh --list --quiet 2>&1 | grep -c "file(s) changed")
if [ "$CHANGES" -gt 0 ]; then
echo "Found $CHANGES repos with changes, backing up..."
./stashme.sh -m "Auto-backup: $(date)"
else
echo "No uncommitted changes found, skipping backup"
fi
Integration with Git Hooks¶
# .git/hooks/pre-rebase (in each repo)
#!/bin/bash
# Backup before rebase operations
echo "Backing up before rebase..."
/usr/local/bin/stashme.sh \
--dir "$(git rev-parse --show-toplevel)" \
--max-depth 1 \
--suffix "pre-rebase" \
-q
Multiple Environments¶
# Development environment
./stashme.sh ~/dev --prefix dev-wip
# Staging environment
./stashme.sh ~/staging --prefix staging-wip
# Production hotfixes
./stashme.sh ~/production --prefix hotfix-wip
Output Examples¶
Successful Run¶
═══════════════════════════════════════════════════════════════
StashMe - Multi-Repository Cloud Stash Utility v1.0.0
═══════════════════════════════════════════════════════════════
Base directory: /Users/developer/github
Branch name: stashme/2026-02-03-143021
Dry run: false
Push to remote: true
[STEP] Searching for git repositories in: /Users/developer/github
[INFO] Found 8 git repositories
[REPO] Processing: webapp (/Users/developer/github/webapp)
[INFO] Found 3 changed file(s)
[SUCCESS] Pushed to origin/stashme/2026-02-03-143021
[REPO] Processing: api-server (/Users/developer/github/api-server)
[DEBUG] No uncommitted changes, skipping
[REPO] Processing: mobile-app (/Users/developer/github/mobile-app)
[INFO] Found 7 changed file(s)
[SUCCESS] Pushed to origin/stashme/2026-02-03-143021
═══════════════════════════════════════════════════════════════
SUMMARY
═══════════════════════════════════════════════════════════════
Repositories found: 8
Repositories with changes: 2
Successfully stashed: 2
Successfully pushed: 2
Skipped (no changes/user): 6
Failed: 0
Dry Run Output¶
═══════════════════════════════════════════════════════════════
StashMe - Multi-Repository Cloud Stash Utility v1.0.0
═══════════════════════════════════════════════════════════════
Base directory: /Users/developer/github
Branch name: stashme/2026-02-03-143021
Dry run: true
Push to remote: true
[REPO] Processing: webapp (/Users/developer/github/webapp)
[INFO] Found 3 changed file(s)
[INFO] [DRY RUN] Would create branch: stashme/2026-02-03-143021
[INFO] [DRY RUN] Would commit 3 file(s)
[INFO] [DRY RUN] Would push to origin
Full docs: STASHME.md | Quick Reference: STASHME-QUICK-REFERENCE.md