I was going to add some changes using git. Instead of committing my changes, I managed to write git reset --soft ~HEAD. How do I undo this command and get my changes back?
- 
                    Have your working files been changed? – Tim Biegeleisen Mar 08 '16 at 08:27
- 
                    After git reset --soft ~head, my changes dissapeared and the files from another commit appeared in my git status – TorK Mar 08 '16 at 08:29
- 
                    I managed to fix this myself. Found this command and it worked: git reset HEAD@{1}. Thank you for your time :) – TorK Mar 08 '16 at 08:33
- 
                    1https://stackoverflow.com/a/2531803/470749 and https://stackoverflow.com/a/7844566/470749 helped me – Ryan Jan 31 '19 at 23:07
- 
                    1Does this answer your question? [How to revert an unnecessary "git reset HEAD~1"](https://stackoverflow.com/questions/16944826/how-to-revert-an-unnecessary-git-reset-head1) – Dherik Aug 07 '20 at 14:06
- 
                    Are you sure you typed "~HEAD" and not "HEAD~"? If I type "git show ~HEAD --name-only" I get "fatal: ambiguous argument '~HEAD': unknown revision or path not in the working tree." – AJM Oct 22 '21 at 13:50
2 Answers
I managed to fix this myself. Found this command and it worked:
$ git reset HEAD@{1} 
- 
                    1I was going to suggest this but I was afraid it wouldn't work. Luckily, you didn't do `git reset --hard ~HEAD`. This would have ended badly for you :-) – Tim Biegeleisen Mar 08 '16 at 08:34
If you mistakenly executed git reset --soft HEAD^1 and want to undo the effect of that command, follow these steps:
- Find the Commit SHA: The first thing you need to do is to get the commit SHA of the commit to which you want to go back. - Run: - git reflog- You'll see an output listing of various actions you've performed and their corresponding commit SHA. Look for the entry before the - reset. It'll typically be at the top of the list, often with a- HEAD@{1}descriptor next to it. Note down the commit SHA.- The reflog output might look something like this: - 7f8e3b9 (HEAD -> main, origin/main) HEAD@{0}: reset: moving to HEAD^1 d1a9fab HEAD@{1}: commit: your recent commit message ...- In this example, - d1a9fabis the commit SHA you're interested in.
- Reset Back to That Commit: Now that you have the commit SHA, you can reset back to it. - git reset --soft d1a9fab- Replace - d1a9fabwith whatever SHA you obtained from the reflog.
Now, you should be back to where you were before you did the accidental git reset --soft HEAD^1.
Remember:
- --softwill keep the working directory and staging area the same. If you want to reset everything including the working directory to the way it was, use- --hard(be very careful with this option as you'll lose any uncommitted changes).
 
    
    - 37
- 7
 
    