Как удалить локальные (неотслеживаемые) файлы из текущего рабочего дерева Git? - PullRequest
6296 голосов
/ 14 сентября 2008

Как вы удаляете неотслеживаемые локальные файлы из вашего текущего рабочего дерева?

Ответы [ 34 ]

50 голосов
/ 22 января 2015

git clean -fd удаляет каталог

git clean -fX удаляет игнорируемые файлы

git clean -fx удаляет игнорируемые и не игнорируемые файлы

могут использоваться все вышеперечисленные опции в комбинации как

git clean -fdXx

обратитесь к руководству по git для получения дополнительной помощи

41 голосов
/ 12 февраля 2017

Удалить все дополнительные папки и файлы в этом репо + подмодули

Это приводит вас в то же состояние, что и свежий клон.

git clean -ffdx

Удалить все дополнительные папки и файлы в этом репо, но не его подмодули

git clean -fdx

Удалить только дополнительные папки, но не файлы (например, папку сборки)

git clean -fd

Удаление лишних папок + игнорируемых файлов (но не новых файлов)

Если файл не был проигнорирован и еще не зарегистрирован, он остается. Обратите внимание на заглавную X.

git clean -fdX

Новый интерактивный режим

git clean
38 голосов
/ 20 июля 2017

OK, удаление ненужных неотслеживаемых файлов и папок легко использовать git в командной строке, просто сделайте это так:

git clean -fd

Перед проверкой дважды проверьте , так как это приведет к удалению файлов и папок без создания истории ...

Также в этом случае -f означает силу, а -d означает директорию ...

Итак, если вы хотите удалить только файлы, вы можете использовать только -f:

git clean -f

Если вы хотите удалить (каталоги) и файлы, вы можете удалить только неотслеживаемые каталоги и файлы, например:

git clean -fd

Также вы можете использовать флаг -x для включения файлов, которые игнорируются git. Это было бы полезно, если вы хотите удалить все.

И добавление флага -i заставляет git запрашивать разрешение на удаление файлов один за другим на ходу.

Если вы не уверены и хотите сначала проверить, добавьте флаг -n.

Используйте -q, если вы не хотите видеть какой-либо отчет после успешного удаления.

Я также создаю изображение ниже, чтобы сделать его более запоминающимся, особенно я видел, как многие люди путают -f иногда для очистки папки или как-то путают!


deleting unwanted untracked files and folder

33 голосов
/ 16 апреля 2015

Лучше использовать: git clean

git clean -d -x -f

При этом удаляются неотслеживаемые файлы, включая каталоги (-d) и файлы, игнорируемые git (-x).

Также замените аргумент -f на -n, чтобы выполнить dry-run или -i для интерактивного режима, и он сообщит вам, что будет удалено.

21 голосов
/ 02 марта 2017

Интерактивный подход пользователя:

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/arsdumpgenerator/s3/ [y/N]? y

-i для интерактива
-f для силы
-d для каталога
-x для игнорируемых файлов (добавьте при необходимости)

Примечание: Добавьте -n или - пробный прогон , чтобы просто проверить, что он сделает.

16 голосов
/ 02 декабря 2015

git clean -f -d -x $(git rev-parse --show-cdup) применяется clean к корневому каталогу, независимо от того, где вы вызываете его в дереве каталога репозитория. Я использую его все время, так как он не заставляет вас покидать папку, в которой вы сейчас работаете, и позволяет очищать и фиксировать прямо из того места, где вы находитесь.

Убедитесь, что флаги -f, -d, -x соответствуют вашим потребностям:

-d
       Remove untracked directories in addition to untracked files. If an
       untracked directory is managed by a different Git repository, it is
       not removed by default. Use -f option twice if you really want to
       remove such a directory.

-f, --force
       If the Git configuration variable clean.requireForce is not set to
       false, git clean will refuse to delete files or directories unless
       given -f, -n or -i. Git will refuse to delete directories with .git
       sub directory or file unless a second -f is given. This affects
       also git submodules where the storage area of the removed submodule
       under .git/modules/ is not removed until -f is given twice.

-x
       Don't use the standard ignore rules read from .gitignore (per
       directory) and $GIT_DIR/info/exclude, but do still use the ignore
       rules given with -e options. This allows removing all untracked
       files, including build products. This can be used (possibly in
       conjunction with git reset) to create a pristine working directory
       to test a clean build.

Также доступны другие флаги, просто отметьте git clean --help.

16 голосов
/ 16 августа 2016

У меня работали только следующие:

git clean -ffdx

Во всех других случаях я получал сообщение "Пропуск каталога" для некоторых подкаталогов.

14 голосов
/ 21 февраля 2016

лайфхак для такой ситуации, которую я только что изобрел и попробовал (это прекрасно работает):

git add .
git reset --hard HEAD

Осторожно! Обязательно передайте все необходимые изменения (даже в неотслеживаемых файлах) перед выполнением этого .

13 голосов
/ 02 марта 2016

Если вы просто хотите удалить файлы, перечисленные как неотслеживаемые «git status»

git stash save -u
git stash drop "stash@{0}"

Я предпочитаю это «git clean», потому что «git clean» удалит файлы игнорируется git, поэтому ваша следующая сборка должна будет пересобрать все и вы можете потерять настройки IDE.

10 голосов
/ 16 февраля 2016

Чтобы узнать, что будет удалено перед фактическим удалением:

git clean -d -n

Будет выведено что-то вроде:

Будет удалено sample.txt

Для удаления всего перечисленного в выводе предыдущей команды:

git clean -d -f

Будет выведено что-то вроде:

Удаление sample.txt

...