- Related Questions & Answers
- Selected Reading
He goes on to explain that recognizing that individual developers and teams have different ways of working, the goal with GitHub Desktop 2.0 is to allow teams to work together collaboratively and support common development patterns used by teams which use GitHub. Hence the inclusion of the support for the Git stash and rebase commands. Stash is a personal finance app that simplifies investing, making it easy and affordable for everyday Americans to build wealth and achieve their financial goals. Stash was built with a simple philosophy: everyone should have access to investing. Thanks to fractional shares, anyone can invest in the stock market with $5 or less.
This question can be rephrased as 'How to save work in progress (WIP) in Git and return to it later when convenient?'
The problem − When we switch branches, Git resets our working directory to contain the snapshot stored in the last commit of the target branch. For example, if we switch from feature to the master branch, Git will replace contents in the working directory with the last commit of the master branch. But if we have local changes in our working directory that we haven't committed yet, these changes will be lost. In this situation, Git will not allow us to switch branches. Let us see how this happens and how we should solve this.
Example − Create an empty repository and execute the commands given below. The example shows that we are working in a feature branch, editing and adding files. Suddenly, we might have to switch to the master for an immediate bugfix in the master branch. It will not allow us to switch to the master branch as we have some work in progress (WIP) in featurebranch.
Git prompts us to stash the changes when we try to switch the branch.
Pushing Work In progress (WIP) to stash
We don't want to commit our changes as we are not done yet. In situations like this we need to stash our changes. Stashing means storing things in a safe place. We are going to store this in a separate stash area in the Git repository. Stashing will not be a part of our history. Let us see how it works.
The following command pushes the work that is lying in the staging area and is pending to be committed into a stash. The −m flag is used to provide a stash message.
By default, untracked files are not included in your stash. To push untracked files, i.e., files in the working directory, we need to include the option −am flag. Let us see an example −
To view all the stashes, use the command − git stash list
The command returns all stashes. Note that the latest stash will be listed at the top of the list, i.e., at index 0.
After stashing, the working tree will be clean. Now the collaborator can switch to any other branch and do some important work. Once done, the collaborator can switch back to the feature branch again. At this point, we decide to apply one of the stashes to our working directory.
Github Desktop Stash Mac
To apply stashed changes back to our working directory we can use the following command −
The following example applies stash sequences at index 0 and index 1
The output shows that the stashes have been applied and now our working directory will contain all changes as expected.
We can verify contents of our working directory using the following commands −
The output is as shown below −
Cleaning the Stash
Once stashes are applied successfully, we may need to clean up things as stashes are not removed by default. We can use the following command to drop a specific stash.
To clear entire contents in the stash in one go, we can use the following command
As of late October 2017, there has been extensive discussion on the Git mailing list, wherein the command
git stash save is being deprecated in favour of the existing alternative
git stash push.The main reason for this is that
git stash push introduces the option of stashing selected pathspecs, something
git stash save does not support.
Stash App Github
git stash save is not going away any time soon, so don’t worry about it suddenly disappearing.But you might want to start migrating over to the
push alternative for the new functionality.