# Recovering
# Recovering from a lost commit
In case you have reverted back to a past commit and lost a newer commit you can recover the lost commit by running
git reflog
Then find your lost commit, and reset back to it by doing
git reset HEAD --hard <sha1-of-commit>
# Restore a deleted file after a commit
In case you have accidentally commited a delete on a file and later realized that you need it back.
First find the commit id of the commit that deleted your file.
git log --diff-filter=D --summary
Will give you a sorted summary of commits which deleted files.
Then proceed to restore the file by
git checkout 81eeccf~1 <your-lost-file-name>
(Replace 81eeccf with your own commit id)
# Restore file to a previous version
To restore a file to a previous version you can use reset
.
git reset <sha1-of-commit> <file-name>
If you have already made local changes to the file (that you do not require!) you can also use the --hard
option
# Recover a deleted branch
To recover a deleted branch you need to find the commit which was the head of your deleted branch by running
git reflog
You can then recreate the branch by running
git checkout -b <branch-name> <sha1-of-commit>
You will not be able to recover deleted branches if git's garbage collector (opens new window) deleted dangling commits - those without refs. Always have a backup of your repository, especially when you work in a small team / proprietary project
# Recovering from a reset
# With Git, you can (almost) always turn the clock back
Don't be afraid to experiment with commands that rewrite history*. Git doesn't delete your commits for 90 days by default, and during that time you can easily recover them from the reflog:
$ git reset @~3 # go back 3 commits
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~3
2c52489 HEAD@{1}: commit: more changes
4a5246d HEAD@{2}: commit: make important changes
e8571e4 HEAD@{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started
- Watch out for options like
--hard
and--force
though — they can discard data. - Also, avoid rewriting history on any branches you're collaborating on.
# Recover from git stash
To get your most recent stash after running git stash, use
git stash apply
To see a list of your stashes, use
git stash list
You will get a list that looks something like this
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
Choose a different git stash to restore with the number that shows up for the stash you want
git stash apply stash@{2}
You can also choose 'git stash pop', it works same as 'git stash apply' like..
git stash pop
or
git stash pop stash@{2}
Difference in git stash apply and git stash pop...
git stash pop:- stash data will be remove from stack of stash list.
Ex:-
git stash list
You will get a list that looks something like this
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
Now pop stash data using command
git stash pop
Again Check for stash list
git stash list
You will get a list that looks something like this
stash@{0}: WIP on master: 70f0d95 Add user role to localStorage on user login
You can see one stash data is removed (popped) from stash list and stash@{1} became stash@{0}.