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