2.4 KiB
2.4 KiB
Hermes Update Autostash Triage
hermes update auto-stashes local changes before pulling. These accumulate as stash@{N} with the naming pattern:
hermes-update-autostash-YYYYMMDD-HHMMSS
Triage Workflow
Step 1: List all stashes
git stash list
Step 2: Quick scan each stash — file types matter
git stash show stash@{N} --stat
Lock-file-only stashes (only package.json, package-lock.json, ui-tui/package-lock.json):
- Usually npm dependency resolution artifacts (registry mirror switches, peer dependency reclassification)
- Safe to drop:
git stash drop stash@{N}
Source-code stashes (.py, .ts, .tsx files changed):
- Need detailed analysis — these may contain valuable local features
Step 3: For source-code stashes — compare against current code
Don't just git stash pop. First check if the features were already merged upstream:
# Get the full diff
git stash show -p stash@{N}
# For each key feature, search current code:
grep -n "feature_keyword" path/to/file.py
Classification:
- ✅ Already in current code → safe to drop
- ❌ Missing from current code → candidate for restoration
Step 4: Decision matrix
| Stash type | Action |
|---|---|
| Lock files only | Drop immediately |
| Source code, all features merged | Drop |
| Source code, some features missing | Selective restore (cherry-pick specific hunks) or apply + resolve conflicts |
| Source code, all features missing | git stash apply stash@{N} then test |
Pitfalls
- Don't blindly pop stashes on an active branch — always
applyfirst (preserves stash), test, thendropif good. - Registry mirror changes in lock files (npmmirror.com, mirrors.tencentyun.com) are local environment artifacts, not valuable code. Drop them.
peer: trueremoval in lock files = npm re-resolved peer deps as direct deps. Not meaningful.- 5+ day old stashes with source changes are likely abandoned experiments. Check if the user still needs them before restoring.
- Merge conflicts are common after 5+ days — upstream moves fast. Expect to resolve manually.
Restoring selectively
If only some hunks from a stash are needed:
# Apply but don't drop
git stash apply stash@{N}
# Review conflicts
git diff
# Or use interactive checkout for specific files
git checkout stash@{N} -- path/to/specific/file.py