Check if “git stash” stashed anything

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?

  • Sublime locks files so that git cannot unstash
  • Git require credentials on submodules
  • What is a stash?
  • WHat does Cross sign indicates on a file in Git for windows
  • automatically stash save/pop changes on git rebase?
  • On local branch, don't want to commit changes, but need to switch to another branch
  • Git alias with two commands (stash pop + merge) executes only the first command. Why? How to execute also the merge?
  • lost git stash changes
  • 4 Solutions collect form web for “Check if “git stash” stashed anything”

    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.

    git stash list #get a listing of all stashes to parse
    git stash show -p stash@{0} #replace 0 with number of relevant stash from list

    You can git diff and inspect the output. If there is none, then there is nothing to stash. Any issue with that strategy?

    On Linux, you can use git stash list | wc -l to count the number of stash entries. If there was nothing to stash, then this returns the same before and after your actual git stash. I’m not sure if you can use this on Windows though.

    Git Baby is a git and github fan, let's start git clone.