You can do it for arbitrary refs. This is how to move a branch pointer: git update-ref -m "reset: Reset <branch> to <new commit>" refs/heads/<branch> <commit> where `-m` adds a message to the reflog for the branch. The general form is git update-ref -m "reset: Reset <branch> to <new commit>" <ref> <commit> You can pick nits about the reflog message if you like - I believe the `branch -f` one is different from the `reset --hard` one, and this isn't exactly either of them. [1]: https://stackoverflow.com/a/5471197/1469259