DEV Community

Manthan Ankolekar
Manthan Ankolekar

Posted on

Mastering Git Stash: A Guide to Temporarily Shelving Changes in Git

Introduction

In the world of version control with Git, you may often find yourself in situations where you need to put aside your current changes to work on something else. This is where git stash comes in handy! The stash feature allows you to temporarily save uncommitted changes without committing them to the repository, giving you the flexibility to switch contexts or experiment freely. In this blog, we’ll dive into the basics of git stash, explore its essential commands, and cover common use cases that make it a must-have tool in every developer’s Git toolkit.


What is Git Stash?

Git stash is a powerful feature that temporarily saves modifications (both staged and unstaged) in your working directory. This lets you "shelve" changes without committing them, effectively giving you a clean slate while preserving your progress. You can later retrieve these stashed changes and continue right where you left off.

Why Use Git Stash?

  • Switching Branches: When you need to switch branches but don’t want to commit incomplete work.
  • Experimenting with Code: Trying out different ideas without committing them, so you can revert to your original state if needed.
  • Working on Urgent Tasks: If an urgent task or bug fix comes up, stash your current work and jump onto the fix.

Essential Git Stash Commands

1. Stashing Your Changes

The most basic command is git stash, which saves the modifications in your working directory and restores it to match the latest commit on your branch.

git stash
Enter fullscreen mode Exit fullscreen mode

You can add a message to describe your stash, making it easier to identify later.

git stash push -m "WIP: Implementing feature X"
Enter fullscreen mode Exit fullscreen mode

2. Viewing the Stash List

To see all your stashed items, use:

git stash list
Enter fullscreen mode Exit fullscreen mode

Each stash is labeled with an identifier (e.g., stash@{0}), along with the commit it’s based on and any custom message you added.

3. Applying a Stash

You can apply the latest stash to your working directory using:

git stash apply
Enter fullscreen mode Exit fullscreen mode

To apply a specific stash, reference it by its identifier:

git stash apply stash@{1}
Enter fullscreen mode Exit fullscreen mode

Note: apply will restore the stash to your working directory without removing it from the stash list.

4. Popping a Stash

If you want to apply the latest stash and simultaneously remove it from the stash list, use:

git stash pop
Enter fullscreen mode Exit fullscreen mode

You can also specify a stash to pop:

git stash pop stash@{1}
Enter fullscreen mode Exit fullscreen mode

5. Deleting a Stash

To remove a specific stash without applying it, you can use:

git stash drop stash@{1}
Enter fullscreen mode Exit fullscreen mode

To clear all stashes from your list, use:

git stash clear
Enter fullscreen mode Exit fullscreen mode

Practical Use Cases for Git Stash

1. Switching Branches Temporarily

Imagine you’re working on a new feature and have several uncommitted changes, but you suddenly need to check something on another branch. Rather than committing unfinished work or losing your progress, use git stash to temporarily save the changes.

git stash
git checkout main  # Switch to another branch
Enter fullscreen mode Exit fullscreen mode

After you’re done, return to your original branch and apply the stash:

git checkout feature-branch
git stash pop
Enter fullscreen mode Exit fullscreen mode

2. Experimenting with Code

If you want to test a new approach or make experimental changes, stashing your current work is a safe way to proceed. For example, stash your initial code, try out your experiment, and then apply or discard the stashed code based on the results.

git stash
# Make experimental changes
# Decide if you want to keep the experiment or return to the stashed state
git stash pop  # if you want to restore the original state
Enter fullscreen mode Exit fullscreen mode

3. Handling Urgent Fixes

Imagine you’re halfway through a feature when an urgent bug report arrives. You can stash your changes, fix the bug, and then return to your feature seamlessly.

git stash
# Fix the bug and commit it
git stash pop  # Return to your previous work
Enter fullscreen mode Exit fullscreen mode

Advanced Tips

Stashing Only Unstaged or Staged Changes

You can choose to stash only unstaged changes:

git stash push --keep-index
Enter fullscreen mode Exit fullscreen mode

Or stash only staged changes:

git stash push --staged
Enter fullscreen mode Exit fullscreen mode

Creating a Branch from a Stash

If your stashed changes represent a new feature, you can even create a branch directly from the stash:

git stash branch new-feature-branch
Enter fullscreen mode Exit fullscreen mode

This command creates a new branch, applies the stash, and removes it from the stash list.


Conclusion

git stash is a versatile tool for managing temporary changes in your Git workflow. By using it effectively, you can switch contexts, experiment, and handle urgent tasks without interrupting your current progress. Whether you’re dealing with bug fixes, feature switches, or temporary changes, git stash can help you work more efficiently. So, next time you need to put work on hold, don’t forget to stash it away!

Happy Coding!

Top comments (0)