Почему 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 не упустит возможности удалить неотслеживаемые файлы.

Другие вопросы по тегам