Каковы деструктивные команды в git?
Я читал, что Git в основном добавляет информацию о истории репозитория, пытаясь запомнить все сделанные изменения, но есть также команды, которые делают необратимые изменения.
Каковы команды, на которые я должен обратить внимание, и избегать неправильного использования, потому что нет возврата?
Ответы
Ответ 1
Здесь есть два типа "деструктивных" - команды, которые разрушают вашу историю и команды git, которые отбрасывают изменения в вашей рабочей копии.
Команды, отбрасывающие изменения дерева работ:
Как уже упоминалось, комбинация reflog и тот факт, что объекты git не сразу отбрасываются (если вы не включаете автоматическую очистку), означает, что вы обычно можете отменить операции, такие как git reset/rebase/merge
.
Эти команды, однако, фактически отбрасывают объекты git, устраняя возможность отмены:
-
git gc
(по умолчанию этот чернослив недоступен для объектов не старше 2 недель)
Ответ 2
Согласно http://blog.reverberate.org/2009/07/30/gits-needs-a-new-interface/
$ git checkout foo.c
... будет перезаписывать любые локальные модификации, которые могут возникнуть при использовании foo.c без запроса.
Ответ 3
Вы можете потерять незафиксированные изменения с помощью команды git reset
. Если ваши изменения зафиксированы, вы защищаетесь reflog в течение нескольких дней, прежде чем он будет очищен gc
.
Например, если вы checkout
, rebase
, reset
или merge
, которые все вносят изменения, вы можете вернуться к предыдущему фиксации, выполнив команду reflog
и используя reset
для reset ваш HEAD для старой фиксации.
Ответ 4
git reset -hard нельзя отменить