53

So here's what happened: I was on a branch 'A' and did a Git stash on that branch. Then I switched to another branch 'B'. I navigated back to Branch 'A' but did not do a Git stash pop. I switched to the master branch and then back to branch 'A'. I am trying to go a git stash pop now but cant seem to get my changes back.. I need to recover that code but whenever I do a git stash pop, my file changes are not listed. I did not commit any code.

Is there a way to recover the changes that I made? would really appreciate any help in this regards.

SQB
  • 3,926
  • 2
  • 28
  • 49
nids
  • 925
  • 2
  • 11
  • 16

4 Answers4

45

We also faced the same issue. So, here is how we recovered the lost changes:

  1. Go back to branch B.

    git checkout B

  2. Use git reflog option to mange reflog information.

    git reflog --all

    Output:

    f332d5c refs/stash@{0}: WIP on B: aa1d0c1 xyz commit message

  3. Now, switch to branch A using git checkout A

  4. Finally, to recover your lost changes.

    git stash apply f332d5c

Puneet Behl
  • 954
  • 7
  • 20
  • 6
    Had access to commit, but lost my stash. Recovered my work `git stash apply`. Thanks! – Mitkins Jun 13 '16 at 23:20
  • 1
    @Mitkins thanks so much, I've also encountered this and `git stash apply` works for me! – LittleLittleQ May 15 '17 at 03:43
  • 4
    you, frankly, just saved my last 2 weeks in combination with http://effectif.com/git/recovering-lost-git-commits. THANKS! – trdavidson Feb 20 '19 at 20:40
  • I managed to lose my stash, TimeMachine wasn't enabled on my new Mac. Remote backup was no help. Who knew you could get a lost stash back. Thank you. – Darren Dec 06 '21 at 17:53
44

Stashes should be viewable via

git stash list

or

gitk --all

also, git stash does not stash untracked files. If you did this and subsequently did a git checkout --force of another branch to overwrite untracked files with tracked ones in another branch, you have lost that content. The recommended way to stash is with

git stash -u

This will prevent losses of this type.

Adam Dymitruk
  • 124,556
  • 26
  • 146
  • 141
1

Something similar happened to me. In short, check to make sure you didn't accidentally push the new files to the other branch.

Here's what happened to me: I stashed my stuff, switched from 'dev' to 'master' to do a hotfix quick. When I pushed my hotfix to master, I didn't notice that I also added my new files that were meant for dev to the master branch--I too assumed stash included those files.

JohnnyFun
  • 3,975
  • 2
  • 20
  • 20
0

I seemed to have lost my git stash changes but my theory as to why is that the changes were already applied.

I did something like this:

> git pull
conflict detected; stash or commit your changes first
(list of conflicting files)

> git stash
> git pull
success (tons of changes pulled)

> git stash pop
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
Dropped refs/stash@{0}

> git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

> git stash list
(nothing)

> git stash pop
No stash entries found.

I think my pull already included the same changes that were in the stash, so the stash had no effect. At least I hope that's what happened.

Dave Cousineau
  • 12,154
  • 8
  • 64
  • 80