Force git stash to overwrite added files
I have some files which were untracked in git. I made some changes and wanted to commit them, but realised I had forgotten to check in the unmodified files first. So I stashed the files, then added the unmodified versions.
Then when I apply the stash to the repository, I get conflicts due to the files having already been added.
How can I apply the stash, and force the versions in the stash to be used in preference to the originals in the repository?
Thanks
Use git checkout
instead of git stash apply
:
$ git checkout stash -- .
$ git commit
This will restore all the files in the current directory to their stashed version.
If there are changes to other files in the working directory that should be kept, here is a less heavy-handed alternative:
$ git merge --squash --strategy-option=theirs stash
If there are changes in the index, or the merge will touch files with local changes, git will refuse to merge. Individual files can be checked out from the stash using
$ git checkout stash -- <paths...>
or interactively with
$ git checkout -p stash
git stash show -p | git apply
and then git stash drop
if you want to drop the stashed items.