Let’s say you are working on your current issue like a volcano about to erupt and unfortunately another more urgent issue is ready. You have not done with current one and you do not want to commit an unfinished work, what will you do? git reset head
or git chekcout
?
of course I am kidding!
Now you need this command git stash
to temporarily store your changes and make sure you can reapply them(you won’t lost them) to your current branch after your repairation of the more urgent one.
For example:
(base) -a01:testGit $ vim testGit.txt
(base) -a01:testGit $ cat testGit.txt
a sample
test git stash
(base) -a01:testGit $ git add testGit.txt
Let’s add a new line ‘test git stash’ in testGit.txt and stage it.
(base) yanjuj-a01:testGit GHIBLI$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: testGit.txt
Its status is modified now.
(base) -a01:testGit $ git stash
Saved working directory and index state WIP on master: 5e1bbb9 add
(base) -a01:testGit $ cat testGit.txt
a sample
(base) -a01:testGit $ git stash list
stash@{0}: WIP on master: 5e1bbb9 add
Then we run command git stash
to see what will happen, you can see the change you just did --‘test git stash’ has been disappeared and we get a new stash which its id is stash@{0}.
(base) -a01:testGit $ git checkout testing
Switched to branch 'testing'
(base) -a01:testGit $ git checkout master
Switched to branch 'master'
Let’s checkout branch and then back to master.
(base) -a01:testGit $ git stash apply stash@{0}
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: testGit.txt
no changes added to commit (use "git add" and/or "git commit -a")
(base) -a01:testGit $ cat testGit.txt
a sample
test git stash
Apply the stash to current branch, our change is back completely.