В Git каждая ветка определяется своим именованным указателем. Когда пользователь находится на ветке, это значит, что его указатель HEAD указывает на именованный указатель ветки, а через него уже на вполне конкретный коммит.
Однако бывает так, что указатель на ветку надо переместить на другой коммит. В английской литературе это называется branch forcing, а по-русски самый правильный перевод будет "принудительное перемещение ветки". Git позволяет это сделать достаточно свободно. Совершенно без разницы, в какой ветке и на каком коммите находится пользователь, хоть на самой перемещаемой ветке (надо проверить). В любой момент можно дать команду:
git branch -f <имя_перемещаемой_ветки> <хеш коммита>
В результате именованный указатель на ветку (он же имя ветки) будет указывать на заданный коммит. И таким образом все, что считалось веткой до данной команды, перестает быть актуальным: после этой команды ветка начинает находиться совершенно в другом месте всего дерева коммитов, а именно там, куда ее переместили.