What Is Git Stash? - ITU Online

What Is Git Stash?

person pointing left

Git Stash is a versatile feature in the Git version control system that allows developers to temporarily shelve (or stash) changes they have made to their working directory so that they can switch contexts or branches without committing incomplete work. This command essentially provides a safe space for modifications that are not yet ready to be committed, enabling a clean working directory. By integrating related concepts such as “version control,” “working directory,” “uncommitted changes,” and “branch switching,” we will explore the utility of Git Stash, its benefits, and how to effectively use it within the Git ecosystem.

Understanding Git Stash

The git stash command is invaluable in situations where the current state of development is not ready to be committed, but there is a need to switch branches to work on something else. It temporarily stores the changes in a stash so that the working directory appears as it did at the last commit, allowing developers to work on a different task without losing their progress. Stashes are stored on a stack, meaning you can create multiple stashes if necessary and manage them individually.

Benefits of Using Git Stash

  • Context Switching: Allows developers to switch between branches without committing half-done work.
  • Clean Working Directory: Temporarily clears modifications, enabling a clean slate for taking up new tasks.
  • Preservation of Changes: Safely stores changes without having to commit them, preserving the work done.

Key Features and How to Use Git Stash

Stashing Changes

  • To stash changes, use the command git stash or git stash push. This command will stash any modified tracked files and staged changes.
  • For more granularity, git stash push -m "message" allows you to provide a descriptive message for the stash, making it easier to identify later.

Listing and Applying Stashes

  • Use git stash list to view all stashes. Each stash is referenced by an identifier like stash@{0}.
  • To apply a stash and bring back the changes, use git stash apply stash@{0}, replacing 0 with the appropriate stash identifier. This command reapplies the changes without removing them from the stash list.
  • git stash pop is similar to apply but also removes the stash from the list once applied.

Managing Stashes

  • To remove a specific stash, you can use git stash drop stash@{0}, specifying the correct identifier.
  • For cleaning up all stored stashes, git stash clear will empty the stash list completely.

Uses of Git Stash

Git Stash is particularly useful in various development scenarios, including:

  • Interrupted Workflow: When urgent fixes or changes are needed on another branch, stash allows saving the current work for later.
  • Experimentation: Trying out new ideas without committing to them immediately. If the experiment fails, you can simply drop the stash.
  • Multiple Work Streams: Managing work on multiple features or fixes simultaneously without mixing them up in the repository.

Frequently Asked Questions Related to Git Stash

What is the difference between `git stash pop` and `git stash apply`?

`git stash pop` applies the changes from the specified stash and then removes the stash from the list. In contrast, `git stash apply` applies the changes but keeps the stash in the list for potential future use.

Can I stash untracked files with Git Stash?

Yes, you can stash untracked files by using the `git stash push -u` or `git stash push –include-untracked` command. This includes any files in the working directory that are not being tracked by Git.

How do I view changes in a git stash?

To view changes in a specific stash, use the command `git stash show stash@{0}`, optionally adding `-p` to show the full diff of what was stashed.

Is it possible to create a branch from a stash?

Yes, you can create a new branch from a stash using `git stash branch stash@{0}`. This checks out a new branch starting from the commit at which the stash was created, applies the stash changes, and then removes the stash if the application is successful.

What happens if a conflict occurs when applying a stash?

If a conflict occurs when applying a stash, Git will stop the application process and mark the conflicts in the affected files. You need to resolve these conflicts manually, just like you would after a merge conflict, and then complete the stash application process.

LIFETIME All-Access IT Training

All Access Lifetime IT Training

Upgrade your IT skills and become an expert with our All Access Lifetime IT Training. Get unlimited access to 12,000+ courses!
Total Hours
2,619 Training Hours
13,281 On-demand Videos


Add To Cart
All Access IT Training – 1 Year

All Access IT Training – 1 Year

Get access to all ITU courses with an All Access Annual Subscription. Advance your IT career with our comprehensive online training!
Total Hours
2,627 Training Hours
13,409 On-demand Videos


Add To Cart
All-Access IT Training Monthly Subscription

All Access Library – Monthly subscription

Get unlimited access to ITU’s online courses with a monthly subscription. Start learning today with our All Access Training program.
Total Hours
2,619 Training Hours
13,308 On-demand Videos

$14.99 / month with a 10-day free trial