У меня есть удаленный репозиторий Git, и мне нужно откатить последние n
коммиты в холодное забвение.
110
Вы можете использовать git revert <commit>…
для всех n коммитов, а затем нажимать как обычно, сохраняя историю без изменений.
Или можно "откатиться" с помощью git reset --hard HEAD~n
. Если вы продвигаете общедоступный или общий репозиторий, вы можете отклониться и нарушить работу других на основе вашей исходной ветки. Git предотвратит это, но вы можете использовать git push -f
для принудительного обновления.
git reset --hard [sha1]
где sha1 - идентификатор хэша фиксации.revert
приведет к тому, что ваши функциональные ветки будут считаться "уже объединенными". Это потому , что эти отрасли будут фактически объединены. Но изменения были отменены. Решение: выберите вишню или отмените фиксацию отката .reset --hard
также приводит к тому, что ветки функций считаются уже объединенными? Я предполагаю, что это не так (гдеrevert
бы).elmarco прав ... его предложение лучше всего подходит для общих / публичных репозиториев (или, по крайней мере, публичных веток). Если он не был опубликован (или вы хотите помешать другим), вы также можете нажать на конкретную ссылку:
Или, если есть конкретный коммит SHA1 (скажем, 1e4f99e в сокращенной форме), вы хотите вернуться к:
источник
К счастью, я смог использовать решение Пэта Нотца, которое полностью удалило нежелательную фиксацию. Однако изначально я получил ошибку
Но добавление
-f
опции force ( ) перезаписывает эту ошибкуисточник
Если у вас есть прямой доступ к удаленному репо, вы всегда можете использовать:
Это работает, поскольку нет попытки изменить несуществующий рабочий каталог. Подробнее см. Исходный ответ:
Как я могу отменить последний коммит в репозитории git bare?
источник
--soft
вообще было нужно? Вероятно, вы могли бы сделать то же самое с простымgit reset
, без флага режима.