You git reset --hard
your local branch to remove changes from working tree and index, and you git push --force
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
With Git 2.23 (August 2019, nine years later), you would use the new command git switch
.
That is: git switch -C mybranch origin/mybranch~n
(replace 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>
Similar to --create
except that if <new-branch>
already exists, it will be reset to <start-point>
.
This is a convenient shortcut for:
$ git branch -f <new-branch> $ git switch <new-branch>