Команда git clean удаляет из рабочей директории Git все не отслеживаемые файлы (untracked files: это файлы, которые не были пока что добавлены командой git add).
[Краткая справка по git clean]
Процесс удаления управляется командами (добавление ключа -i активирует интерактивное удаление файлов и директорий):
git clean -n Безопасная проверка, какие файлы будут удалены командой git clean.
git clean -f Удаление не отслеживаемых файлов.
git clean -f -d Удаление не отслеживаемых директорий.
git clean -f -x Удаление не отслеживаемых файлов .gitignore.
Во избежание возможных проблем перед использованием команды git clean следует четко понимать следующее:
• Удаленные не отслеживаемые файлы нельзя восстановить. Они удаляются мимо корзины. • Команда git clean может удалить важное свойство или не сохраненные конфигурационные файлы. • Всегда предварительно запускайте команду безопасной проверки git clean -n, чтобы увидеть, какие untracked-файлы будут удалены. • Для получения максимального контроля используйте интерактивный режим (-i) для команды git clean, чтобы удалять файлы по отдельности. • Иногда вместо git clean лучше применить git stash.
Отличие команды git clean от команд git reset или git rebase. Иногда, когда разработчик хочет очистить историю своих веток или упростить историю фиксации git, он исследует команду git clean.
Чтобы очистить ветки, изменить фиксации или санировать историю фиксаций, лучшие варианты включают следующее:
• Использовать команду git rebase [3]. • Использовать команду git squash [3]. • Использовать команду git stash [4]. • Активировать агрессивную сборку мусора Git.
Если же ваша цель просто очистить локальный репозиторий git, то это руководство [2] может оказаться более полезным.
[Как работает git clean]
Если разработчику нужно удалить не отслеживаемые файлы из рабочего дерева git, то самый простой способ для этого - git clean. Команда git clean очень глубоко настраивается параметрами, так что может удалять следующие элементы:
• Исторически отслеживаемые файлы. • Файлы, которые являются частью существующей фиксации (existing commit). • Файлы, добавленные в индекс. • Новые директории. • Файлы, перечисленные в .gitignore.
git clean требует применения force. Еще одно ограничение команды git clean заключается в том, что её нельзя использовать, если явно не указан ключ --force (-f) или --dry-run (-n).
Если вы просто запустите команду git clean без дополнительных опций, то она не сработает, и будет выдано сообщение об ошибке о том, что "не был предоставлен ключ force". Например:
$ cd ~/git-clean-example
$ git clean
fatal: clean.requireForce neither -i, -n, nor -f given; refusing to clean
Пошаговая инструкция по удалению не отслеживаемых файлов. Выполните следующие шаги для удаления не отслеживаемых (untracked) файлов рабочего каталога Git:
1. Запустите git clean -n, чтобы увидеть список не отслеживаемых файлов (untracked), которые потенциально будут удалены, без их удаления (dry run, холостой запуск).
2. Запустите git clean -f для принудительного удаления untracked-файлов.
3. Используйте git clean -f -d для удаления untracked-директорий.
4. Используйте git clean -f -x для удаления untracked-файлов, которые отфильтровываются списком в файле .gitignore.
5. Для интерактивного удаления каждого элемента добавьте к выше перечисленным командам ключ -i.
Поскольку операция очистки необратимо удаляет файлы, разработчики Git предусмотрели опцию -n для холостого запуска git clean, которая просто выведет список не отслеживаемых файлов, подлежащих удалению:
$ git clean -n
Would remove clean-cache.ini
Would remove clean-untracked.txt
Would remove clean-stash.html
Если удаление перечисленных в этом списке файлов не представляет для вас сюрприза, то можно применить ключ --force:
Помните, что git clean только лишь удаляет untracked-файлы. Чтобы определить текущее состояние репозитория, определить какие файлы отслеживаются, а какие нет, используйте команду git status.
[Удаление игнорируемых файлов]
По умолчанию git clean не трогает директории или файлы, которые отфильтрованы списком .gitignore (игнорируемые файлы). Однако ключ -d приводит к удалению директорий, а ключ -x принудительно удаляет игнорируемые файлы. Вот как это выглядит:
$ git clean --force -x -d
Would remove helloworld.class
Would remove new-directory/
Вместо перечисления отдельных опций --force -x -d можно применить сокращенный вариант -fdx:
$ git clean -fdx
Would remove helloworld.class
Would remove new-directory/
git stash и git clean. Следует разумно использовать команду git clean. Основная цель распределенной системы контроля версий (distributed version control system), которой является Git - не допустить потери каких-либо изменений. Удаление файлов до того, как они попали в базу данных репозитория, противоречит философии управления версиями.
Поэтому вместо того, чтобы применять git clean, в определенных случаях стоит рассмотреть использование команды git stash.
Команда git stash позволяет разработчикам слить все изменения во временную ветку и одновременно вернуться к исходному состоянию репозитория. Впоследствии можно будет выполнить откат обратно запуском git stash pop, при этом никакие изменения не потеряются.
Таким образом, возможность выполнить git stash для припрятывания untracked-файлов во многих случаях не оправдывает агрессивный вызов git clean, который выполнит необратимые изменения. Будьте осторожны с использованием git clean для удаления не отслеживаемых файлов.
[Ссылки]
1. git clean: How to remove untracked files in Git site:theserverside.com. 2. Clean Git up! site:theserverside.com. 3. git rebase. 4. git stash help.