Почему git checkout не удаляет новые файлы?
Предположим, я создаю (но не фиксирую) файл file.txt
, а затем введите git checkout HEAD
или же git checkout HEAD .
, я думал git checkout
в основном перезаписали ваши текущие рабочие файлы снимком при коммите, который вы ему дали, поэтому я бы подумал, что это удалит file.txt
, Но это не так. Зачем?
2 ответа
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
здесь и про уборку здесь.
file.txt
будучи не отслеженным, "невидим" для Git. Если есть другой файл с именем file.txt
в коммите, который вы извлекаете, он может быть перезаписан как побочный эффект проверки, но Git не упустит возможности удалить неотслеживаемые файлы.