Meltemi Meltemi - 1 year ago 125
Git Question

Github: reset to previous commit

Small team. A colleague pushed to

by mistake. He has reset his local repo but cannot
push -f
to Github because repo is protected.

I have
ed the repo but not merged his errant commit into my local

How can I, assuming I can
push -f
to origin, reset
on Github so that it reflects the state it was in before his mistake?

$ git push origin 2860a4c:master
! [rejected] 2860a4c -> master (non-fast-forward)
error: failed to push some refs to ''
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.

Do I really need to integrate the bad commit (with
git pull
) before I can then, I assume,
reset hard 2860a4c
and then
push -f origin

I just don't want to make things worse.

Answer Source

Below are the steps you may do, assuming you have permission for git push -f.

On your machine, do:

# Step 1: Take the changes from remote
git pull

# Step 2: Note the commit to which you want for restoring your repo to 
# using `git log`. Say the commit id is "x". 
git log

# Step 3: Do hard reset for that commit. All the changes after commit "x" will be gone
git reset --hard x    # where x is the commit id

# Step 4: Push to remote
git push -f

Then on collegue's machine, do step 1 to step 3 and then do git pull to merge the remote changes

In case you do NOT have permission for git push -f, do:

git pull

git revert <commit id>   # may get it via "git log"

git push

With git revert, changes from the reverted commit will be removed, but this commit will remain in the commit history.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download