git clean видаляє з робочого каталогу файли, які Git не відстежує: тимчасові файли, результати збирання, згенерований код, залишки експериментів.
Головне - ці файли не можна відновити засобами Git. Їх немає в жодному коміті, reflog чи stash. Тому git clean за замовчуванням навіть відмовляється працювати без явного прапорця (clean.requireForce=true).
Безпечний порядок - спершу подивитися:
git clean -n # dry run: що буде видалено
git clean -nd # разом з невідстежуваними каталогами
git clean -f # видалити файли
git clean -fd # файли й каталоги
Прапорці:
| Прапорець | Що робить |
|---|---|
-n |
лише показати (dry run) |
-f |
справді видалити |
-d |
включно з каталогами |
-x |
також проігноровані файли (.env, vendor/, node_modules/) |
-X |
лише проігноровані файли |
-i |
інтерактивний вибір |
-e <шаблон> |
додатково виключити шаблон |
-x - найнебезпечніший прапорець. git clean -fdx у Laravel-проєкті видалить .env, vendor/, node_modules/, storage/*.key, локальну базу SQLite - усе, що ігнорується. Корисно для «чистого» збирання в CI, але вдома варто запускати лише після -n.
git clean -fdx -e .env -n # усе, окрім .env, - спершу перевірка
Інтерактивний режим зручний, коли більшість файлів треба видалити, а кілька - залишити:
git clean -id
Типові сценарії:
- повернути репозиторій до стану щойно клонованого:
git restore --staged --worktree .(відстежувані) +git clean -fd(невідстежувані); - прибрати лише результати збирання, не чіпаючи нові вихідні файли:
git clean -fX; - CI на повторно використовуваному runner-і -
git clean -ffdxперед збиранням (подвійний-fвидаляє й вкладені репозиторії).
Альтернатива без ризику: якщо не впевнені, git stash -u прибере невідстежувані файли, але збереже їх у stash.