How do I move master back several commits in git?

Note that at any given time you can change where a branch points to by using git update-ref refs/heads/branch id , but before you do this, you must give a name to the tip of the tree, otherwise your work will unaccessible. So these two commands may do the job

 git update-ref refs/heads/newfeature HEAD
 git update-ref refs/heads/master XXYYY

But make sure that you do not have any uncommited changes otherwise all hell will break loose


In order to do it locally, you can do the following commands to go to master and move it to the old commit.

git checkout master
git reset --hard <old_commit_id>

If you then want to push it to the remote, you need to use the -f option.

git push -f origin master

Before pointing master to a previous commit, I recommend backing up your current master:

$ git checkout -b master_backup

Then you can safely point master some number of commits back, e.g. 3:

$ git reset --hard master~3

After moving master, see your tree of commits:

$ git log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all

Now, I would recommend keeping the backup until you're absolutely sure it's unnecessary (for instance, once your new approach is fully implemented), but when you're sure, you can clean up by deleting master_backup:

$ git branch -D master_backup

You can always do a git reset <commit>. Perhaps the easiest way to do this is use a graphical frontend, i.e. gitk.

You should perhaps first do a git branch branch-for-failed-experiment so the work on the experiment isn't lost forever.

Be careful, if you published the branch (i.e., if others could have work based on your to-be-deleted commits), they will be left stranded. Make sure they sync up with you.

Tags:

Git

Git Reset