Манипулирование историей очень распространено среди разработчиков, которые регулярно работают с Git. Действительно, разработчикам часто приходится удалять коммиты из истории Git. К счастью, Git предоставляет множество команд, позволяющих сделать эту операцию возможной.
Давайте приступим 😎.
Шаг 0 — Подготовка
Прежде чем манипулировать историей Git, убедитесь, что ваш рабочий каталог не содержит никаких изменений, с помощью команды git status .
Шаг 1. Удалите коммиты локально
Чтобы удалить коммиты с удаленного сервера, сначала вам необходимо удалить их из локальной истории.
1.1 Для последовательных коммитов сверху
Если коммиты, которые вы хотите удалить, помещены в начало вашей истории коммитов, используйте команду git reset --hard
с объектом HEAD
и количеством коммитов, которые вы хотите удалить.
git reset --hard HEAD~1
Эта команда удалит последний коммит .
git reset --hard HEAD~3
Эта команда удалит последние три коммита .
Вы также можете удалить определенный коммит, используя хеш коммита, например:
git reset --hard <hash>
1.2 Для непоследовательных коммитов
Однако если вы хотите удалить непоследовательные фиксации, вам нужно будет использовать интерактивное перебазирование.
- [ ] Найдите хеш последнего коммита, содержащий все коммиты, которые вы хотите удалить, с помощью команды
git reflog
. - [ ] Запустите интерактивную перезагрузку с помощью
git rebase -i <hash>
. - [ ] На экране редактирования найдите строки фиксации, которые хотите удалить, и удалите их.
- [ ] Сохранить и выйти (возможно, вам придется разрешить конфликты)
- [] Завершите интерактивную перезагрузку с помощью
git rebase --continue
или начните заново, прервав перезагрузку .
Шаг 2. Удалите коммиты с удаленного компьютера.
Чтобы удалить коммиты с удаленного компьютера, вам нужно будет отправить локальные изменения на удаленный компьютер с помощью команды git push .
git push origin HEAD --force
Поскольку ваша локальная история отличается от удаленной истории, вам необходимо использовать опцию force
.
Последние мысли
Как видите, Git позволяет легко удалять коммиты с удаленного сервера.
Однако вам нужно быть осторожным при использовании команды git push
с опцией force
, потому что вы можете потерять прогресс, если не будете осторожны.
Спасибо за чтение!