git branch -f
Я согласен с решением и комментариями Марка Лонгаира и рекомендую всем прочитать их перед тем, как действовать, но я бы посоветовал сделать акцент на
git branch -f <branchname> <commit>
Вот сценарий, где мне нужно было сделать это.
Сценарий
Разработка в неправильной ветви и, следовательно, необходимо сбросить его.
Старт в порядке
Чистая разработка и выпуск некоторого программного обеспечения.
Разработка на неправильной ветке
Ошибка: случайно останьтесь в ветке релиза при дальнейшей разработке.
Осознай ошибку
"О, нет! Я случайно разработал ветку релиза." Рабочая область может быть перегружена наполовину измененными файлами, которые представляют незавершенную работу, и мы действительно не хотим трогать и портить. Мы просто хотели бы, чтобы git перевернул несколько указателей, чтобы отследить текущее состояние, и вернул эту ветку релиза так, как должно быть.
Создайте ветку для разработки, которая является актуальной, в которой хранится выполненная на данный момент работа, и переключитесь на нее.
git branch development
git checkout development
исправить ветку
Сейчас мы находимся в проблемной ситуации и нуждаемся в ее решении! Исправьте ошибку (переместив ветку релиза вместе с разработкой) и верните ветку релиза так, как должно быть.
Исправьте ветку выпуска, чтобы она указала на последний реальный выпуск.
git branch -f release release2
Ветка релиза снова верна, вот так ...
Что если я перенесу ошибку на пульт?
git push -f <remote> <branch>
хорошо описано в другой теме, хотя слово «перезаписать» в заголовке вводит в заблуждение.
Принудительно «git push» перезаписывать удаленные файлы