Git имеет две разные команды для возврата коммита, которые работают по-разному.
Сброс
git reset <commit>
сбросит текущую ветвь обратно к указанному коммиту , Есть также несколько псевдонимов для отмены последнего коммита et c. По умолчанию он сохранит изменения из коммита в вашей рабочей копии, но в виде изменений без изменений. Если вы хотите полностью избавиться, используйте опцию --hard
.
Учитывая, что вы уже отправили на сервер, выполнить сброс будет небезопасно. Это фактически переписывает историю, которая может испортить рабочие пространства других людей, если они уже вытянули ваш коммит. Обычно я бы использовал это только для локальных коммитов, которые еще не были переданы.
Revert
git revert <commit>
делает то же самое, сбрасывая текущую ветвь к предыдущему коммиту, но вместо удаления нежелательных коммитов добавляет новый коммит, который отменяет изменения , Это означает, что ваша история потенциально немного сложнее, но она намного безопаснее, поскольку вы не переписываете историю.
Выбор вишни
Есть еще одна команда, которая может оказаться полезной. Если вы делаете коммит в неправильную ветку или даже просто хотите скопировать коммит без полного слияния, вы можете использовать git cherry-pick <commit>
.
Возможно, вы также захотите защитить основную ветвь. Мы используем gitlab и защищаем эту ветку, требуя запроса на слияние из другой ветки, чтобы сэкономить на случайных нажатиях, подобных этому. Я уверен, что другие инструменты могут сделать что-то подобное.