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

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

41 ответ

Решение

Согласно документации 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

--force

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

-Икс

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

-ИКС

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

-n

--пробный прогон

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

-d

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

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

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

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

git clean -i

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

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

git iclean

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

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

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

git add --all
git reset --hard HEAD

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

git clean -d -f -f

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

git clean -fdx

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

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

РЕДАКТИРОВАТЬ: Также я нашел способ показать неотслеживаемый файл в тайнике (например, git show stash@{0}^3) /questions/26090966/v-git-est-li-sposob-pokazat-neotslezhivaemyie-spryatannyie-fajlyi-bez-primeneniya-kesha/26090990#26090990

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

Будьте внимательны при выполнении команды `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%, что удаление вашей незафиксированной работы безопасно, вы можете вместо этого использовать копирование

git stash --all

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

git stash drop // or clean

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

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

git clean -f {dir_path}

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

git clean -fxd {dir_path}

после этого вы будете изменять файлы только в git status,

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

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

git clean -ffdx

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

git clean -fdx

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

git clean -fd

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

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

git clean -fdX

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

git clean

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

git clean -fd

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

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

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

git clean -f

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

git clean -fd

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

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

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

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

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


удаление ненужных неотслеживаемых файлов и папок

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

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

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

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

git clean -fdXx

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

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

git clean -d -x -f

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

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

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

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

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

Примечание: добавьте -n или --dry-run, чтобы просто проверить, что он будет делать.

Чтобы удалить неотслеживаемые файлы:

git add .
git reset --hard HEAD

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

git add .
git reset --hard HEAD

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

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

git clean -ffdx

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

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,

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

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

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

git add --all, git stash а также git stash dropпопробуйте эти три команды в указанном порядке, чтобы удалить все неотслеживаемые файлы. При добавлении всех этих неотслеживаемых файлов в git и их сохранении все эти неотслеживаемые файлы перемещаются в список тайников, а при удалении первого, т.е. stash@{0}, сохраненные изменения удаляются из списка тайников.

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

git clean -d -n

Это выведет что-то вроде:

Удалил sample.txt

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

git clean -d -f

Это выведет что-то вроде:

Удаление файла sample.txt

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

git clean -fdn

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

git clean -fd

Команда для удаления неотслеживаемых файлов из git docs - это git clean

git clean - удаляет неотслеживаемые файлы из рабочего дерева

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

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

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

Объяснение:

1-й

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

2. -f, --force

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

3. -i, - интерактивный

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

4. -n, --dry-run

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

5. -q, --quiet

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

6. -e, --exclude =

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

7.-х

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

8. -X

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

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

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

Нормальный 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!

Мы можем легко удалить локальные неотслеживаемые файлы из текущего рабочего дерева 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. Сбросить ветку локального репозитория так, чтобы она была похожа на заголовок удаленного репозитория
  4. https://jwiegley.github.io/git-from-the-bottom-up/3-Reset/4-doing-a-hard-reset.html

Я думаю, что это самый простой и безопасный способ!

      git add .
git stash 

Для получения дополнительной информации https://www.atlassian.com/git/tutorials/saving-changes/git-stash#stashing-your-work

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

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

(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)
Другие вопросы по тегам