Почему git checkout не удаляет новые файлы? - PullRequest
0 голосов
/ 27 августа 2018

Предположим, я создаю (но не фиксирую) файл file.txt, а затем набираю git checkout HEAD или git checkout HEAD .. Я подумал, что git checkout в основном перезаписал ваши текущие рабочие файлы снимком при коммите, который вы ему дали, поэтому я бы подумал, что это удалит file.txt. Но это не так. Почему?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

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 можно найти здесь и об очистке здесь .

0 голосов
/ 27 августа 2018

file.txt, будучи неотслеживаемым, «невидим» для Git. Если в коммите, который вы извлекаете, есть другой файл с именем file.txt, он может быть перезаписан как побочный эффект извлечения, но Git не сможет удалить неотслеживаемые файлы.

...