Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Git generally doesn't delete commits until a garbage collection is done (and assuming no other references). If you find yourself in this situation again, then try:

git reflog show remotes/origin/develop

This will show the reflog for the branch, then you can find the hash just before your push, check it out, then force push it back.

I've recovered from other developer's accidental force pushes in less than 5 minutes, with no commits lost.



But if the remote has advanced since you pushed, you'll still need to reflog on the remote server, right?


Someone must have pushed the version the remote was at, so the correct commit would be on someone's devbox.


It was a series of PRs merged on github, no one in the office had a current branch of develop.


It looks like you can use the GitHub API to get the events for the specific repo, which would include your force push, and the hash of the previous commit. Some instructions at https://objectpartners.com/2014/02/11/recovering-a-commit-fr...

edit: This should be in reply to jordigh's comment above


If it's just a matter of "merging" couldn't you just merge those branches again? Or do you resolve conflicts on github or some such (something that's never fit my workflow but I can imagine others using it)?


That's really the point. The guy who made the last change should have it locally as well. Even if he git pulls first.


During any push, the remote advertises latest SHA-1. I don't know if we actually use it in 'push -f'. But if we haven't, it's a good idea to save this in local reflog.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: