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

6418

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

  • 75
    На этом интерактивном шпаргалке git ndpsoftware.com/git-cheatsheet.html показано рабочее пространство git (Google дает вам лучшие результаты с «рабочим пространством», чем с «рабочей копией»).
  • 23
    Примечание: если вы хотите удалить только некоторые неотслеживаемые файлы, но не все , git clean теперь имеет интерактивный режим! Смотрите мой ответ на этот другой вопрос : git 1.8.4+
Показать ещё 7 комментариев
Теги:
git-branch
branch

36 ответов

7575
Лучший ответ

В соответствии с документацией Git git clean

Удалите ненужные файлы из рабочего дерева


Шаг 1 - показать, что будет удалено с помощью параметра -n:

git clean -n

Чистый шаг - Остерегайтесь: это удалит файлы:

git clean -f
  • Чтобы удалить каталоги, запустите git clean -f -d или git clean -fd
  • Чтобы удалить игнорируемые файлы, запустите git clean -f -X или git clean -fX
  • Чтобы удалить игнорируемые и не проигнорированные файлы, запустите git clean -f -X или git clean -fX

Обратите внимание разность событий на X для двух последних команд.

Если для clean.requireForce установлено значение "true" (по умолчанию) в вашей конфигурации, нужно указать -f, иначе ничего не произойдет.

Снова просмотрите документацию git-clean для получения дополнительной информации.

Функции

-f

- сила

Если переменная конфигурации Git clean.requireForce не установлена ​​в false, Git clean откажется запускаться, если не указано -f, -n или -i.

-x

Не используйте стандартные правила игнорирования, считанные из .gitignore (для каждого каталога) и $GIT_DIR/info/exclude, но все равно используйте правила игнорирования, заданные с параметрами -e. Это позволяет удалить все необработанные файлы, включая сборку продуктов. Это можно использовать (возможно, в сочетании с Git reset), чтобы создать нетронутый рабочий каталог для проверки чистой сборки.

-X

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

-n

- всухую

На самом деле ничего не удаляйте, просто покажите, что будет сделано.

-d

Удалите ненужные каталоги в дополнение к необработанным файлам. Если неподписанный каталог управляется другим репозиторием Git, он по умолчанию не удаляется. Используйте параметр -f дважды, если вы действительно хотите удалить такой каталог.

  • 241
    git clean -f работает только в каталоге, где он называется (и подкаталогах). Если вы хотите очистить всю рабочую копию, вам следует вызвать ее в корневой каталог.
  • 0
    Как мне сделать так, чтобы он включал игнорируемые каталоги / файлы?
Показать ещё 12 комментариев
823

Используйте git clean -f -d, чтобы убедиться, что каталоги также удалены.

Затем вы можете проверить, действительно ли ваши файлы прошли с помощью git status.

  • 97
    Как уже говорилось, хорошо запустить его с помощью git clean -n -d
  • 9
    То же самое нужно сделать git clean -nd и git clean -fd .
448

Я удивлен, что никто не упоминал об этом раньше:

git clean -i

Это означает интерактивность, и вы получите краткий обзор того, что будет удалено, предлагая вам возможность включить/исключить затронутые файлы. В целом, все еще быстрее, чем запуск обязательного --dry-run до реальной очистки.

Вам нужно будет бросить в -d, если вы также захотите позаботиться о пустых папках. В конце он делает хороший псевдоним:

git iclean

Таким образом, дополнительное ручное проведение интерактивных команд может утомиться для опытных пользователей. В эти дни я просто использую уже упомянутый git clean -fd

  • 13
    получил: ошибка: неизвестный переключатель `я '
  • 13
    @ pal4life Он был добавлен в 1.8.4, возможно, вы используете старую версию git? github.com/git/git/blob/master/Documentation/RelNotes/1.8.4.txt
Показать ещё 1 комментарий
213

Если untracked-каталог представляет собой собственный хранилище git (например, подмодуль), вам нужно дважды использовать -f:

git clean -d -f -f

  • 2
    Кстати, это написано в документации : Git откажется удалять каталоги с подкаталогом или файлом .git, если не указан второй -f. Но все равно спасибо!
  • 0
    О боже, я искал это два часа! Спасибо за размещение этого решения
149

Простой способ удалить неотслеживаемые файлы

Чтобы удалить все неотслеживаемые файлы, простой способ - сначала добавить их все и сбросить репозиторий, как показано ниже.

git add --all
git reset --hard HEAD

  • 3
    Вы можете заменить git add --all на git add . , Таким образом, вы можете сделать это более коротким способом в oneline git add . && git reset --hard HEAD (будьте очень осторожны с этой командой) .
  • 11
    Зачем использовать это над git clean ?
Показать ещё 9 комментариев
127

Мне нравится git stash push -u потому что вы можете отменить их все с помощью git stash pop.

РЕДАКТИРОВАТЬ: Также я нашел способ показать неотслеживаемый файл в тайнике (например, git show stash@{0}^3) https://stackoverflow.com/questions/12681529/in-git-is-there-a-way-to-show-untracked-stashed-files-without-applying-the-stas

EDIT2: git stash save устарело в пользу push. Спасибо @script-волк.

  • 1
    Можете ли вы объяснить -u на тайнике? Я не понимаю, как это работает иначе, чем git stash save. Я попробовал это, и это сработало. Посмотрел на git docs и тоже не смог там его найти.
  • 6
    -u эквивалентно --include-untracked . Вы можете найти помощь с git help stash .
Показать ещё 2 комментария
102

Это то, что я всегда использую:

git clean -fdx

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

  • 8
    Не могли бы вы объяснить замечание о крупных проектах?
  • 0
    @Martin Один из проектов, над которым я работаю, +8 лет с +80 разработчиками, активно кодирующими. Git иногда не может очистить его при первом проходе.
Показать ещё 1 комментарий
83

git-clean - это то, что вы ищете. Он используется для удаления необработанных файлов из рабочего дерева.

76

Если необходимо удалить неподписанные файлы из определенного подкаталога,

git clean -f {dir_path}

И комбинированный способ удаления невоспроизводимых файлов/файлов и игнорируемых файлов.

git clean -fxd {dir_path}

после этого вы будете модифицировать файлы только в git status.

48

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

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

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

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

git clean -fdXx

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

  • 7
    Команда git clean -fdXx выдает сообщение об ошибке «fatal: -x и -X нельзя использовать вместе» (используя git-2.8). Для вашего последнего предложения в вашем ответе, пожалуйста, предоставьте ссылку на руководство git. ура
  • 0
    выполните две команды последовательно: git clean -fdX, git clean -fdx
36

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

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

git clean -ffdx

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

git clean -fdx

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

git clean -fd

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

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

git clean -fdX

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

git clean
34

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

git clean -fd

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

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

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

git clean -f

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

git clean -fd

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

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

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

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

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


Изображение 7450

33

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

git clean -d -x -f

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

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

19

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

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 или - сухим, чтобы просто проверить, что он будет делать.

15

Для меня только после работы:

git clean -ffdx

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

  • 1
    Благодарю. Я пропустил -x и просто использовал git clean -ffd чтобы избежать удаления файлов в .gitignore.
  • 1
    -ff ftw. Понятия не имел - спасибо!
15

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

Убедитесь, что флаги -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.

  • 0
    Кстати, вы можете просто сделать git clean {flags}: / так будет, как будто вы запустили команду в корне репо
13

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

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

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

  • 2
    Это также удалит действительные изменения в отслеживаемых файлах. Я бы не рекомендовал это.
  • 1
    Да, вы хотите сначала внести изменения в отслеживаемые файлы.
13

Жизнеспособность для такой ситуации я только что придумал и попробовал (что прекрасно работает):

git add .
git reset --hard HEAD
Осторожно! Обязательно скопировать любые необходимые изменения (даже в неискренные файлы) перед выполнением этого.
  • 2
    По крайней мере, это другой подход. :) Другой способ, который запомнил бы удаленные файлы в reflog, но не в каких-либо ветках, был бы: git add . git commit -m 'about to delete' git reset --hard HEAD~
  • 1
    еще более быстрый способ - это git add . && git reset --hard HEAD
Показать ещё 4 комментария
10

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

git clean -d -n

Он выведет что-то вроде:

Удалит sample.txt

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

git clean -d -f

Он выведет что-то вроде:

Удаление sample.txt

8

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

git clean -fdn

Это покажет вам список файлов, которые будут удалены. Теперь, чтобы фактически удалить эти файлы, используйте следующую команду:

git clean -fd
7

Кто-то должен действительно упомянуть:

git clean [<options>]

Я прав?

6

Будьте осторожны при выполнении команды ` git clean`.

Всегда используйте -n перед запуском фактической команды, показывая, какие файлы будут удалены.

git clean -n -d 
git clean -f -d

По умолчанию git clean будет удалять только неиспользуемые файлы, которые не игнорируются. Любой файл, который соответствует шаблону в ваших .gitignore или других файлах игнорирования, не будет удален. Если вы хотите также удалить эти файлы, вы можете добавить команду -x в чистую команду.

git clean -f -d -x

Существует также интерактивный режим -i с чистой командой

git clean -x -i

В качестве альтернативы

Если вы не на 100% уверены, что удаление вашей незавершенной работы безопасно, вы можете вместо этого использовать stashing

git stash --all

Он также очистит ваш каталог, но даст вам гибкость для извлечения файлов в любой момент времени с помощью stash с применить или поп. Затем в более позднем пункте вы можете очистить свой тайник, используя:

git stash drop // or clean
5

Мы можем легко удалить локальные неотслеживаемые файлы из текущего рабочего дерева git, используя приведенные ниже комментарии git.

git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]

Пример:

git reset --hard HEAD

Ссылки:

  1. https://git-scm.com/docs/git-reset
  2. Как мне использовать 'git reset --hard HEAD', чтобы вернуться к предыдущему коммиту?
  3. Сбросить ветку локального репозитория, чтобы она была похожа на HEAD удаленного репозитория
  4. https://jwiegley.github.io/git-from-the-bottom-up/3-Reset/4-doing-a-hard-reset.html
5

ued Команда Удаление необработанных файлов из git docs git clean

git clean - удалить неработающие файлы из рабочего дерева

Предлагаемый метод: Режим взаимодействия с помощью git clean -i поэтому мы можем контролировать его. посмотрим оставшиеся доступные варианты.

Доступные параметры:

git clean 
    -d -f -i -n -q -e -x -X (can use either)

Объяснение:

1. -d

Удалите ненужные каталоги в дополнение к необработанным файлам. Если неподписанный каталог управляется другим хранилищем git,  он не удаляется по умолчанию. Используйте параметр -f дважды, если вы действительно хотите удалить такой каталог.

2. -f, --force

Если переменная конфигурации git clean.requireForce не установлена ​​в false, git clean откажется запускаться, если не указано -f, -n или  -i.

3. -i, --interactive

Показать, что будет сделано и очистить файлы в интерактивном режиме. Подробнее см. "Интерактивный режим".

4. -n, --dry-run

На самом деле ничего не удаляйте, просто покажите, что будет сделано.

5. -q, --quiet

Будьте спокойны, только сообщайте об ошибках, но не удаляйте файлы.

6. -e, --exclude =

Помимо найденных в .gitignore (для каждого каталога) и $GIT_DIR/info/exclude, также рассмотрите эти шаблоны в  набор действующих правил игнорирования.

7. -x

Не используйте стандартные правила игнорирования, считанные из .gitignore (для каждого каталога) и $GIT_DIR/info/exclude, но все равно используйте игнорирование  правила, заданные с параметрами -e. Это позволяет удалить все необработанные файлы, включая сборку продуктов. Это можно использовать (возможно, в  совместно с git reset), чтобы создать нетронутый рабочий каталог для проверки чистой сборки.

8. -X

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

5

git clean -f to remove untracked files from working directory.

Я рассмотрел некоторые основы здесь, в моем блоге, git-intro-basic-commands

5

Обычная команда git clean не удаляет неиспользуемые файлы с помощью git version 2.9.0.windows.1.

$ git clean -fdx     # doesn't remove untracked files
$ git clean -fdx *   # Append star then it works!
3

oh-my-zsh с zsh предоставляет эти отличные псевдонимы через плагин git. Их также можно использовать в bash.

gclean='git clean -fd'
gpristine='git reset --hard && git clean -dfx'

  • gclean удаляет неотслеживаемые каталоги в дополнение к неотслеживаемым файлам.
  • gpristine жестко сбрасывает локальные изменения, удаляет неотслеживаемые каталоги, неотслеживаемые файлы и не использует стандартные правила игнорирования, считываемые из .gitignore (для каждого каталога) и $ GIT_DIR/info/exclude, но все же использует правила игнорирования, заданные с помощью -e опции. Это позволяет удалить все неотслеживаемые файлы, включая продукты сборки. Это может быть использовано (возможно, в сочетании с git reset) для создания первичного рабочего каталога для тестирования чистой сборки.
  • 3
    Как это относится к zsh ? Это должно работать и в bash ...
  • 0
    Спасибо за ваш отзыв, мое заявление сбило с толку. Я хотел сказать, что выделенные псевдонимы приходят автоматически с oh-my-zsh. Они явно отлично работают в bash . Я отредактировал свой ответ, чтобы отразить это.
3

Очистить git-репозиторий и все подмодули рекурсивно

Следующая команда рекурсивно очистит текущий репозиторий git и все его подмодули:

(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)
1

Мне нравится использовать команду git stash, позже вы можете получить спрятанные файлы и изменения. git clean также хороший вариант, но полностью зависит от ваших требований. Вот объяснение git stash и git clean, 7.3 Git Tools - Копирование и очистка

1

Мне не удалось использовать самые популярные ответы здесь - git все равно не удаляет неотслеживаемые файлы из хранилища. Понятия не имею почему. Это мой супер упрощенный ответ без СПЕЦИАЛЬНЫХ КОМАНД GIT!

Миссия: удалить неотслеживаемые файлы из репозитория git:

  1. Переместите файлы и папки в другое место из локальной папки проекта на некоторое время
  2. Удалите все строки в .gitignore об этих файлах и папках для фиксации.
  3. Git добавить.
  4. Git commit -m "Очистка хранилища от неотслеживаемых файлов"
  5. Git push

Все файлы и папки были удалены из хранилища.

Давайте восстановим их на localhost, если они вам нужны:

  1. Переместить назад все файлы и папки, которые вы временно перенесли в локальную папку проекта
  2. Переместить назад все строки об этих файлах и папках в .gitignore
  3. Git добавить.
  4. Git commit -m "Проверка или файлы, не появляющиеся снова в репозитории git"
  5. Git push

Вы сделали!

1
git clean -f

удалит неотслеживаемые файлы из текущего git

git clean -fd

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

0

используйте git reset HEAD <file>, чтобы отключить файл

0

Примечание. Сначала перейдите в каталог и проверите ветку, которую вы хотите очистить.

-i интерактивный режим, и он расскажет вам, что будет удалено, и вы можете выбрать действие из списка.

  • Только для очистки файлов [Папки не будут перечислены и не будут очищены]: $ git clean -i

  • Очистить файлы и папки: $ git clean -d -i

-d включая каталоги.


Если вы выберете c из списка. Файлы/папки будут удалены, которые не будут отслеживаться, а также удалите файлы/папки, которые вы испортили. *

Например: если вы реструктурируете папку на своем пульте дистанционного управления и переместите изменения на локальный компьютер. файлы/папки, созданные другими изначально, будут находиться в прошлой папке и в новой, которую вы реструктурируете.

-2

Ни одна из опций git clean не работает для меня. В итоге я удалил все, кроме папки .git, а затем восстановил проект с помощью простого git checkout .

-6

Вы также можете использовать rm: rm -rf filename

Ещё вопросы

Сообщество Overcoder
Наверх
Меню