I'm having problems with recovering changes from a stashed and untracked file in git. See minimal example below:
mkdir test_stash
cd test_stash/
git init
echo "text" | tee a.txt b.txt
git add a.txt
git commit -m "First commit"
git stash -u #stash b.txt
echo "newtext" > b.txt
git add b.txt
git commit -m "Second commit"
git stash applyThis returns me an error:
b.txt already exists, no checkout
Could not restore untracked files from stash entryThe example alone is a bit silly, but I ran into this problem when stashing changes before pulling from remote and then finding out that a new file had been created on remote with the same name.
After some googling I was able to recover the changes with:
git checkout stash -- .
git checkout stash^3 -- .
git reset HEAD . #to unstagebut this seems quite hacky. Isn't there a way to force my git stash apply, thus bringing my workspace to the original state before the stash? The changes on b.txt are already committed anyway, so it's not like I would risk losing unsaved changes.
1 Answer
When you save a stash git also remembers the commit. So you can simply create a new branch based on this commit with git stash branch <branchname> instead of applying the stash.