What is a Git Stash and How Do I Use It?

Git is a powerful version control system used by developers worldwide to manage and track changes in their code. Among its many features, Git stash is a useful tool that allows you to temporarily save your work without committing it to the repository. This feature is particularly helpful when you need to switch branches or perform quick updates without losing your progress. In this article, we’ll delve into the concept of Git stash, its importance, and how to use it effectively.

Understanding Git Stash

In simple terms, Git stash is like a temporary shelf where you can store your uncommitted changes. When you’re working on a branch and realize you need to switch to another branch or resolve an urgent issue, you might not want to commit incomplete changes. Git stash allows you to save these changes, clean your working directory, and later retrieve them to continue where you left off.

Think of it as a way to pause your current work without creating a commit or a separate branch.

Why is Git Stash Useful?

Git stash is a lifesaver in many scenarios. Here are a few reasons why it’s widely used:

  • Switching Contexts: When you need to switch to another branch to address an urgent bug fix or feature request.
  • Testing Changes: When you want to test a quick fix or experiment without committing incomplete work.
  • Clean Working Directory: When you need a clean slate to perform a task like merging or pulling updates from the remote repository.

How to Use Git Stash

Using Git stash is straightforward. Below are the primary commands and their explanations:

1. Stashing Changes

To stash your changes, use the following command:

git stash

This command saves your uncommitted changes, including modifications to tracked files and staged changes, and reverts your working directory to the last committed state.

Example:

Suppose you’ve modified files file1.txt and file2.txt in your working directory. Running git stash will save these changes and clean your directory.

2. Listing Stashes

You can view all the stashed changes using:

git stash list

This command displays a list of all stashed changes along with their index and a brief description.

Example Output:

stash@{0}: WIP on main: 1234567 Initial commit
stash@{1}: WIP on feature-branch: abcdef0 Added new feature

3. Applying Stashed Changes

To reapply the most recent stash, use:

git stash apply

If you want to apply a specific stash, specify its index:

git stash apply stash@{index}

Note that applying a stash does not remove it from the stash list. To remove it, you need to drop it explicitly.

4. Dropping a Stash

If you no longer need a stash, remove it using:

git stash drop stash@{index}

You can also remove the most recent stash with:

git stash drop

5. Popping a Stash

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

git stash pop

This is a combination of git stash apply and git stash drop.

6. Creating a Named Stash