I would argue that most of our git usage is pretty straight forward:
- git add
- git commit
- git push
- git branch
- git co
- git merge
- git log
- git diff
That covers literally 99% of what I have to do with git on a daily basis. So when you need to do something more complex it can be a bit disconcerting. Today I had to revert to a previous git hash and make that commit, from 2 days ago, master. Here’s the process:
Note 1: If you want to preserve your previous master then do a git checkout from the pushed repo into a separate directory on your machine. Without this the git repo actually loses all the changes between the start and end of the hash you reverted to.
- Use github to find the commit you want to revert to. This will be referred to as COMMIT_HASH
- Commit everything currently in progress so you don’t get any error messages about it. Or delete everything (I have a git trash alias which does checkout -f).
- Change back to master with git co master
- Use this command: git reset –hard COMMIT_HASH
- Verify your changes are there with git log
- This makes COMMIT_HASH your local master. However you will NOT be able to push because you have “time traveled” to the past. The secret here is to do a -f push so your changes are forced to the serve. Use this command: git push -f origin master
Note 2: In this case I didn’t even try to preserve the changes made within that 2 day period. That’s possible but definitely harder.
Note 3: The -f overwrites what’s on the server since COMMIT_HASH so it will never be available. Please understand this well before doing this.
Note 4: My pairing buddy, Dv, helped out with this. Thanks man!
Note 5: Stack Overflow on git push -f