Suppose there are multiple git branches that are in your local repo. You've done tons of work, eventually committed and pushed. Then, you found you were working at a wrong branch! And pushed changes to a wrong branch remotely too! Ooops...
What to do?
First, see which branch you're on:
$ git branch
master
duplicate-target
* remove-tab
api-integration
You're on branch remove-tab
, but you actually should have committed and pushed from branch api-integration
. You can revert the commit you did and commit to the correct branch by doing following:
- On the
remove-tab
branch, do:
$ git log
commit 984d0ccdd9c80941121dfc1e208b25efeb091111
Author: Wendy
Add api integration and tests
commit 0909fa4b87ddaa7d08e823f9b02f24c35a9f372a
Author: Eric
Update server
commit ef78fcb6a1d30955210178772dcc71234c5e4012
Author: Wendy
Add new removed tab
- Copy the hash that the latest commit this branch should be at and do:
$ git reset 0909fa4b87ddaa7d08e823f9b02f24c35a9f372a
And you'll see
M app/controllers/book_controller.rb
M app/models/post.rb
M app/models/target.rb
M db/schema.rb
- At this point, you're reverted local repo to the state right before you did the wrong commit.
Now you need to stash all the changes and force push to remote.
$ git stash
$ git push --force
After force push, the branch at remote is reverted to previous state. You're good on remove-tab
branch.
- Now onto the branch you should've been on.
$ git checkout api-integration
Pop up stash, commit and push again
$ git stash pop
$ git commit -a
$ git push
You're all set!