git reset --hard your local branch to remove changes from working tree and index, and you
git push --force (or
git push --force-with-lease) your revised local branch to the remote.
(other solution here, involving deleting the remote branch, and re-pushing it)
This SO answer illustrates the danger of such a command, especially if people depends on the remote history for their own local repos.
You need to be prepared to point out people to the RECOVERING FROM UPSTREAM REBASE section of the
git rebase man page.
Plus, as noted by ringo in the comments, if the remote branch is protected against force push, a
git revert, as in this answer, might be preferable.
With Git 2.23 (August 2019, nine years later), you would use the new command
git switch -C mybranch origin/mybranch~n
n by the number of commits to remove)
That will restore the index and working tree, like a
git reset --hard would.
The documentation adds:
-C <new-branch> --force-create <new-branch>
--createexcept that if
<new-branch>already exists, it will be reset to
This is a convenient shortcut for:
$ git branch -f <new-branch> $ git switch <new-branch>