问题描述:

I accidentally created a git stash with the --all option, which, according to the docs,

If the --all option is used instead then the ignored files are stashed and cleaned in addition to the untracked files.

So now restoring my changes with git stash pop fails:

some/ignored/file already exists, no checkout

Could not restore untracked files from stash

(What I actually should have done is use --include-untracked)

git stash show -p still lists my changes, without any ignored files. How can I apply my stash without git trying to restore ignored files?

Edit: I just created a test repository and did a git stash --all. Ignored files were stashed and removed from the file system. My problem is that in my case above, they were stashed, but not removed from the file system, so that seems to be the cause for the problem.

网友答案:

Use log to find the commit hash of your stash

$ git log --graph --all --decorate --oneline

All is important because it also shows stashes

It should look similar to this

*-.   cd5e9ae (refs/stash) WIP on master: cd48088 Fixed GET chats output
|\ \  
| | * e48d0d7 untracked files on master: cd48088 Fixed GET chats output
| * 1a3bf97 index on master: cd48088 Fixed GET chats output
|/  
* cd48088 (HEAD, origin/master, master) Fixed GET chats output

Now, you want to checkout the top of the stash (here, it's cd5e9ae)

$ git checkout cd5e9ae

You will be in a detached HEAD state
reset it one step back, keeping the changes

$ git reset HEAD~1

and now stash it like you meant to

$ git stash --include-untracked

Now you can go back to master or wherever you were working and apply that new correct stash

$ git checkout master
$ git stash pop

Inspired by this blog post

I just tested it and it worked in my project with my ignored files, it should work for you as well.

网友答案:

You should delete those files in order to pop the stash. You can do it manually or you can follow this method:

git stash -all  # make a new stash           
git stash pop [email protected]{1}  # apply your original stash

If you like it, you can drop the new stash you have done:

git stash drop
相关阅读:
Top