Undo git stash pop that results in merge conflict
As it turns out, Git is smart enough not to drop a stash if it doesn't apply cleanly. I was able to get to the desired state with the following steps:
- To unstage the merge conflicts:
git reset HEAD .
(note the trailing dot) - To save the conflicted merge (just in case):
git stash
- To return to master:
git checkout master
- To pull latest changes:
git fetch upstream; git merge upstream/master
- To correct my new branch:
git checkout new-branch; git rebase master
- To apply the correct stashed changes (now 2nd on the stack):
git stash apply stash@{1}
Luckily git stash pop
does not change the stash in the case of a conflict!
So nothing, to worry about, just clean up your code and try it again.
Say your codebase was clean before, you could go back to that state with: git checkout -f
Then do the stuff you forgot, e.g. git merge missing-branch
After that just fire git stash pop
again and you get the same stash, that conflicted before.
Keep in mind: The stash is safe, however, uncommitted changes in the working directory are of course not. They can get messed up.