Предположим, я создаю (но не фиксирую) файл file.txt
, а затем набираю git checkout HEAD
или git checkout HEAD .
. Я думал, что git checkout
в основном перезаписал ваши текущие рабочие файлы с помощью снимка при фиксации, которую вы ему даете, поэтому я подумал, что это удалит file.txt
. Но это не так. Почему?
file.txt
, не отслеживаемый, «невидим» для Git. Если в извлеченном коммите есть другой файл с именем file.txt
, он может быть перезаписан как побочный эффект извлечения, но Git не будет изо всех сил удалять неотслеживаемые файлы.
git checkout
не перезаписывает вашу рабочую копию намеренно.
Он работает так же, как git reset --hard
, но с важным отличием - git checkout
- это безопасный рабочий каталог, поэтому он не перезаписывает существующие изменения в вашем рабочем каталоге. На самом деле, это немного умнее - он пытается выполнить тривиальное слияние в рабочем каталоге.
Итак, если вы хотите отменить все свои изменения и просто получить снимок из HEAD, используйте git reset --hard HEAD
или просто git reset --hard
.
Но даже git reset --hard
не удаляет ваши файлы неотслеживаемый. Чтобы удалить неотслеживаемые файлы:
git clean --dry-run
. Он просто сообщает вам, что будет удалено. Сделайте это, потому что очистка - опасная команда.git clean --force
, чтобы в конечном итоге удалить неотслеживаемые файлы.Вы можете найти более подробную информацию о git checkout
и git reset
здесь и о чистке здесь.