git revert
Тема дорожной карты · Изучи Git
git revert <commit> создаёт новый коммит, чей diff — обратный к целевому. Эта команда позволяет отменить изменения, внесённые предыдущим коммитом, без изменения истории коммитов. Это делает её безопасной для использования на общих ветках, где изменения могут быть общими для нескольких разработчиков. Если вы хотите отменить слияние, вы можете использовать параметр -m 1, чтобы выбрать «магистральный» родительский коммит. Использование git revert для отмены диапазона коммитов также возможно: git revert A..B.
Использование git revert имеет свои подводные камни. Например, если вы отмените реверт, то вернётся исходное изменение. Также, если вы ревертируете слияние, это может создать проблемы при повторном слиянии той же ветки. В этом случае вам потребуется повторный реверт или rebase. Команда --no-commit позволяет подготовить обратные изменения, но не создавать новый коммит, что может быть полезно для объединения этих изменений с другими правками в одном коммите.
Как это работает
Команда git revert создает новый коммит, который отменяет изменения предыдущего коммита. Это делается путем создания обратного diff для отмены изменений. Для отмены конкретного коммита используется команда git revert <sha>. Если вы хотите отменить диапазон коммитов, используйте git revert A..B.
Когда применять
git revert следует использовать на общих ветках, где изменения могут быть общими для нескольких разработчиков. Это позволяет сохранить историю коммитов, что важно для понимания истории проекта. Вместо git revert, следует использовать git reset только на локальных ветках, которые ещё не были запушены. Если вы хотите исправить опечатки в последнем сообщении коммита или добавить забытый файл перед push, вы можете использовать git commit --amend. Всегда используйте git stash или git commit --amend перед git reset --hard, чтобы сохранить вашу работу, которая может быть восстановлена через git reflog в течение 30 дней.
Типичные ошибки
Одним из наиболее распространённых заблуждений при использовании git revert является применение команды git reset --hard на ветке с несохранённой работой, что приводит к немедленному удалению этой работы (хотя она может быть восстановлена через git reflog в течение 30 дней). Другой распространённой ошибкой является попытка переписать сообщение коммита или force-push для уже запущенного коммита, что переписывает общую историю коммитов и может вызвать проблемы для всей команды. Также, использование git reset там, где правильно было бы использовать git revert, может привести к созданию новых «отменяющих» коммитов, которые могут быть опасными для использования на общих ветках.