Каковы деструктивные команды в git?

Я читал, что Git в основном добавляет информацию о истории репозитория, пытаясь запомнить все сделанные изменения, но есть также команды, которые делают необратимые изменения.

Каковы команды, на которые я должен обратить внимание, и избегать неправильного использования, потому что нет возврата?

Ответ 1

Здесь есть два типа "деструктивных" - команды, которые разрушают вашу историю и команды git, которые отбрасывают изменения в вашей рабочей копии.

Команды, отбрасывающие изменения дерева работ:

  • git reset
  • git checkout

Как уже упоминалось, комбинация reflog и тот факт, что объекты git не сразу отбрасываются (если вы не включаете автоматическую очистку), означает, что вы обычно можете отменить операции, такие как git reset/rebase/merge.

Эти команды, однако, фактически отбрасывают объекты git, устраняя возможность отмены:

  • git gc (по умолчанию этот чернослив недоступен для объектов не старше 2 недель)

Ответ 3

Вы можете потерять незафиксированные изменения с помощью команды git reset. Если ваши изменения зафиксированы, вы защищаетесь reflog в течение нескольких дней, прежде чем он будет очищен gc.

Например, если вы checkout, rebase, reset или merge, которые все вносят изменения, вы можете вернуться к предыдущему фиксации, выполнив команду reflog и используя reset для reset ваш HEAD для старой фиксации.

Ответ 4

git reset -hard нельзя отменить