Check if "git stash" stashed anything

Hand-E-Food picture Hand-E-Food · Jul 2, 2014 · Viewed 13.4k times · Source

I have a Windows Command script designed to merge the dev branch into a project branch. It starts by reading the current branch name, stashing changes, fetching and merging the dev and project branches, then switches back to the original branch and pops the stash.

The issue is there might not be any changes to stash. This leaves the previous stash at the top of the stack. When it gets to the end of the script and pops the stash, it's popping the previous stash which is unrelated to the current branch.

Set SourceBranch=dev
Set ProjectBranch=project

:: Stash current changes.
For /F "tokens=1,2" %%a In ('Git branch -q') Do If "%%a"=="*" Set CurrentBranch=%%b
Git stash save -u

:: Pull latest source branch.
Git checkout %SourceBranch%
Git pull
For /F "tokens=1,3" %%a In ('Git branch -q -v') Do If "%%a"=="*" Set MergeHash=%%b

:: Merge source into project branch.
Git checkout %ProjectBranch%
Git pull
Git merge --commit %MergeHash%||Exit 1

:: Return to original branch.
Git checkout %CurrentBranch%
Git stash pop

How can I get feedback from Git stash or Git status to determine whether I need to pop the stash?

Answer

Strikeskids picture Strikeskids · Jul 2, 2014

git stash allows you to provide a message. You can use a generated token as your message so that you know it won't conflict with other git stash messages.

Then, when you want to check whether or not to pop, simply check if the git stash list output contains your token. If so, pop the stash.