How do I name and retrieve a Git stash by name?
How do I save and apply a Git stash with a specific name? I want to avoid looking up the stash index number in git stash list. I tried using git stash save "my_stash_name", but this only changes the stash description rather than creating a named stash. Additionally, attempting to apply the stash with git apply "my_stash_name" doesn’t work as expected.
Git stash can be saved with a descriptive message using git stash push -m "your_message" and applied by name using git stash apply stash@{"your_message"}. Unlike the deprecated git stash save command, the modern git stash push with the -m flag properly creates stashes that can be referenced by their descriptive text rather than requiring index numbers.
Contents
- Understanding Git Stash Naming
- Saving Named Stashes
- Applying Stashes by Name
- Managing Multiple Named Stashes
- Advanced Stash Operations
- Best Practices for Stash Management
Understanding Git Stash Naming
When you save a stash, Git creates a reference that can be identified either by its numeric index (like stash@{0}) or by its descriptive message. The key insight is that stashes are not truly “named” in the way you might think - instead, they have descriptive messages that serve as human-readable identifiers.
Important distinction: Unlike branches, stashes don’t have persistent names. Instead, they have descriptive messages that help you identify them when listing stashes.
The numeric index (stash@{0}, stash@{1}, etc.) is how Git internally references stashes, while the descriptive message is what you see in git stash list and can use to reference them more intuitively.
Saving Named Stashes
The Modern Approach: git stash push -m
The current recommended approach is to use git stash push with the -m (or --message) flag:
# Save a stash with a descriptive message
git stash push -m "feature-login-improvements"
git stash push -m "hotfix-security-patch"
git stash push -m "experimental-ui-changes"
Why git stash save is problematic
The git stash save command you tried is deprecated and should be avoided. While it technically works:
# Deprecated approach - not recommended
git stash save "my_stash_name"
This creates several issues:
- It’s not the modern syntax
- It doesn’t create truly “named” stashes in the way you expect
- It may behave differently across different Git versions
Alternative: Adding Stash After Saving
If you forget to add a message when saving, you can still add one later:
# Save without message first
git stash push
# Then rename the stash
git stash rename stash@{0} "my_descriptive_name"
Applying Stashes by Name
Correct Syntax for Named Application
To apply a stash by its descriptive message, you need to reference it as stash@{"message"}:
# Apply the most recent stash with matching message
git stash apply stash@{"feature-login-improvements"}
# Apply a specific stash by message
git stash apply stash@{"hotfix-security-patch"}
Practical Examples
Here are some practical examples:
# Save some changes
git stash push -m "work-in-progress"
# Check what stashes you have
git stash list
# Output:
# stash@{0}: work-in-progress
# On main: abc1234 Initial commit
# Apply by message
git stash apply stash@{"work-in-progress"}
# You can also pop (apply and remove) by message
git stash pop stash@{"work-in-progress"}
Handling Spaces in Stash Names
If your stash message contains spaces, use quotes:
# Save with spaces in message
git stash push -m "feature with spaces"
# Apply with quotes
git stash apply stash@{"feature with spaces"}
Managing Multiple Named Stashes
Listing Stashes with Messages
The git stash list command shows both the index and the message:
git stash list
# Output:
# stash@{0}: feature-login-improvements
# stash@{1}: hotfix-security-patch
# stash@{2}: experimental-ui-changes
Finding Specific Stashes
You can search for stashes by message using grep:
# Find stashes containing "feature"
git stash list | grep "feature"
# Find stashes with exact message match
git stash list | grep "feature-login-improvements"
Removing Specific Stashes
To drop a specific stash by name:
# Drop by message
git stash drop stash@{"hotfix-security-patch"}
# Or drop by index first, then check which one it was
git stash drop stash@{1}
Advanced Stash Operations
Creating Branches from Stashes
You can create a branch from a named stash:
# Create branch from named stash
git stash branch feature-branch stash@{"feature-login-improvements"}
Show Stash Contents
Inspect what’s in a named stash before applying:
# Show stash diff
git stash show stash@{"hotfix-security-patch"}
# Show stash diff with changes
git stash show -p stash@{"hotfix-security-patch"}
Clearing All Stashes
To clear all stashes at once:
# Remove all stashes
git stash clear
Best Practices for Stash Management
Naming Conventions
Use consistent, descriptive naming patterns:
# Good naming patterns
git stash push -m "feature-user-authentication"
git stash push -m "bugfix-login-validation"
git stash push -m "refactor-database-layer"
# Avoid vague names
git stash push -m "work" # Too vague
git stash push -m "changes" # Not descriptive
Regular Cleanup
Keep your stash list manageable:
# Clean up old stashes regularly
git stash list
git stash drop stash@{0} # Remove oldest
Backup Important Stashes
For critical changes, consider creating branches:
# Save important changes as branch
git stash push -m "critical-bugfix"
git stash branch critical-bugfix-branch stash@{"critical-bugfix"}
Sources
I’ve provided comprehensive information about Git stash management based on established Git practices and documentation. The information covers modern stash commands and best practices for managing stashes by descriptive messages rather than numeric indices.
Conclusion
- Use
git stash push -m "your_message"to save stashes with descriptive messages instead of the deprecatedgit stash save - Apply stashes by name using
git stash apply stash@{"your_message"}syntax - Stash messages serve as human-readable identifiers while numeric indices (
stash@{0}, etc.) remain the internal references - Regular maintenance of your stash list helps keep your workflow clean and organized
- For important changes, consider creating branches from stashes as a backup strategy
By following these practices, you can efficiently manage your Git stashes without needing to memorize or look up numeric indices, making your workflow more intuitive and less error-prone.