Откат удаленного репозитория Git

У меня есть удаленный репозиторий Git, и мне нужно откатить последние n коммиты в холодное забвение.

Ответов (4)

Решение

Вы можете использовать git revert <commit>… для всех n коммитов, а затем нажимать как обычно, сохраняя историю без изменений.

Или можно "откатиться" с помощью git reset --hard HEAD~n . Если вы продвигаетесь в публичный или общий репозиторий, вы можете отклониться и нарушить работу других на основе вашей исходной ветки. Git помешает вам сделать это, но вы можете использовать git push -f для принудительного обновления.

Если у вас есть прямой доступ к удаленному репо, вы всегда можете использовать:

git reset --soft <sha1>

Это работает, поскольку нет попытки изменить несуществующий рабочий каталог. Подробнее см. В исходном ответе:

Как я могу отменить последний коммит в репозитории git bare?

elmarco прав ... его предложение лучше всего подходит для общих / общедоступных репозиториев (или, по крайней мере, общедоступных веток). Если он не был опубликован (или вы хотите помешать другим), вы также можете нажать на конкретную ссылку:

git push origin old_master:master

Или, если есть конкретная фиксация SHA1 (например, 1e4f99e в сокращенной форме), вы хотите вернуться к:

git push origin 1e4f99e:master

К счастью, я смог использовать решение Пэта Нотца, которое полностью удалило нежелательную фиксацию. Однако изначально я получил ошибку

error: failed to push some refs to 'ssh://[email protected]'
To prevent you from losing history, non-fast-forward updates were rejected*

Но добавление -f опции force ( ) перезаписывает эту ошибку.

git push -f origin 52e36b294e:master