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

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


person readonly    schedule 14.09.2008    source источник
comment
Эта интерактивная шпаргалка по git ndpsoftware.com/git-cheatsheet.html показывает рабочее пространство git (Google дает лучшие результаты с рабочей областью, чем с рабочей копией).   -  person qneill    schedule 01.02.2013
comment
Примечание: если вы хотите удалить только некоторые неотслеживаемые файлы, но не все, git clean теперь имеет интерактивный режим! См. мой ответ на этот другой вопрос: git 1.8.4+   -  person VonC    schedule 23.07.2013
comment
Обратите внимание, что вы не удаляете файлы из ветки git, поскольку ветка является ссылкой на фиксацию и, следовательно, не содержит неотслеживаемых файлов. Они присутствуют только в рабочем каталоге и не имеют ничего общего с ветвями. Наверное, это просто уточнение терминологии.   -  person Pavel Šimerda    schedule 15.09.2014
comment
Прежде чем опубликовать новый ответ, подумайте, что на этот вопрос уже есть более 25 ответов. Убедитесь, что ваш ответ соответствует тому, чего нет среди существующих ответов   -  person Sazzad Hissain Khan    schedule 15.06.2017
comment
Чтобы прояснить понимание непосвященных и новичков в Git - запустите git status, и если он показывает файл как неотслеживаемый, и вы не хотите, чтобы этот файл в репо, вы можете просто перейти в свою файловую систему и удалить или переместить его. . Это не повредит вашему локальному репо или Git. Вы также можете использовать git clean или другие варианты ответов ниже, включая интерактивную версию для удаления только выборочных файлов, но интерактивный режим может быть утомительным. Что бы вы ни делали, убедитесь, что вы понимаете, что git clean удалит, или используйте --dry-run, чтобы он сообщал вам, ничего не удаляя.   -  person LightCC    schedule 02.09.2017
comment
Если файлы еще не отслеживаются, не могли бы вы просто удалить их без git? rm files-to-be-deleted   -  person mhatch    schedule 14.03.2018
comment
Я бы спрятал его на случай, если вам понадобится снова их использовать и очистить, используйте git clean: подробнее: git-scm.com/docs/git-clean   -  person Cafebabe    schedule 20.06.2018
comment
@ User1291 вы потеряете все свои локальные ветки и тайники, если будете клонировать заново в другом каталоге.   -  person Abdul Rauf    schedule 13.07.2018


Ответы (40)


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

Синопсис

git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…​

Описание

Очищает рабочее дерево, рекурсивно удаляя файлы, не находящиеся под контролем версий, начиная с текущего каталога.

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

Если указаны какие-либо необязательные <path>... аргументы, затрагиваются только эти пути.


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

# Print out the list of files and directories which will be removed (dry run)
git clean -n -d

Шаг очистки - будьте осторожны: при этом будут удалены файлы:

# Delete the files from the repository
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.

-x

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

-X

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

-n, --dry-run

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

-d

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

person Community    schedule 15.09.2008
comment
git clean -f работает только в каталоге, в котором он вызван (и подкаталогах). Если вы хотите очистить всю рабочую копию, вы должны вызвать ее в ее корневом каталоге. - person Eduardo Bezerra; 08.03.2013
comment
Как мне включить игнорируемые каталоги / файлы? - person Jürgen Paul; 14.05.2013
comment
Он также удаляет все файлы внутри .gitignore. Мне нужно удалить только новые файлы / папки, а не в .gitignore - person Kostanos; 06.08.2013
comment
@Kostanos Если вы не хотите удалять файлы в .gitignore, не указывайте флаг -x. - person Lo-Tan; 23.08.2013
comment
Обратите внимание, что флаги -x или -X удаляют файлы, игнорируемые .gitignore, но не файлы, игнорируемые update-index --assume-unchanged. - person Ville; 06.11.2013
comment
Прошу прощения, если я чего-то упускаю, но чем git clean -f отличается от простого удаления файла? - person maan81; 30.09.2014
comment
git clean -f :/ работает так, как если бы вы запустили его в корневом каталоге репозитория. См. Также более поздние ответы, также учитывающие подмодули с git clean -ffxd :/ - person here; 17.10.2014
comment
Количество голосов говорит о том, насколько важно иметь более интуитивную команду. Что-то вроде git remove untracked или git remove_untracked - person Ich; 07.05.2015
comment
@Michelle git clean -xfd также УДАЛЯЕТ ВСЕ ФАЙЛЫ, В настоящее время ИГНОРИРОВАННЫЕ В ВАШЕМ .gitignore, и они не подлежат восстановлению. - person thedanotto; 20.11.2015
comment
@Michelle: Приятно написать, что на самом деле он делает: он удаляет все файлы, которые были в списке gitignore, и я узнал об этом после неудачного опыта. - person Akash KC; 05.06.2016
comment
@ maan81, ты прав. git clean -f ничем не отличается от простого удаления файла. Но это не делает его бесполезным, как я, может быть, неправильно, вы подразумеваете. Когда у вас много артефактов сборки, то есть сотни файлов в десятках каталогов, просто удалить их может оказаться не так просто. Вам придется написать сценарий. Это то, что git clean -f делает для вас, поскольку точно знает, какие файлы относятся к репо, а какие нет. - person Alexander Amelkin; 03.07.2017
comment
Use -f option twice if you really want to remove such a directory. вот что я искал! Благодарность! - person Kevin Friedheim; 17.07.2017
comment
После борьбы и проклятий в течение 45 минут я нашел комментарий @ EduardoBezerra ... Я думаю, что OP должен отредактировать свой ответ, чтобы подчеркнуть поведение git clean - удаление только материалов в каталоге, в котором вы находитесь, и его подкаталогах. Это не ясно ни из справки git, ни из самого ответа. - person Motti Shneor; 20.09.2018
comment
используйте -i, чтобы сделать его интерактивным - person Bharat; 02.08.2019
comment
git clean -fd был волшебной частью вашего ответа, мне нужно было удалить все неотслеживаемые файлы и директории! - person Gabriel Staples; 18.03.2020
comment
Обратите внимание, что git clean работает на уровне каталогов, а не на уровне репо. Поэтому, если вы запустите git clean внутри каталога в репо, он будет очищать только рекурсивно в каталоге. - person zed; 14.05.2020
comment
Или просто используйте git add -A && git reset --hard - person Omid Ostovari; 22.04.2021

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

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

    git clean -n
    

    or

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

    git clean -fd
    

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

person robert.berger    schedule 26.05.2009
comment
Как было сказано ранее, хорошо провести пробный запуск с git clean -n -d - person Ms01; 09.12.2013
comment
То же самое делать git clean -nd и git clean -fd. - person Micer; 10.07.2017

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

git clean -i

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

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

git iclean

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

person SystematicFrank    schedule 30.12.2013
comment
@ pal4life Он был добавлен в 1.8.4, возможно, вы используете старую версию git? github.com/git/git/blob/master/ Документация / RelNotes / 1.8.4.txt - person Mattias Backman; 30.09.2014
comment
Мне это нравится - мне удобнее иметь его в моей истории bash, чем любой из других вариантов, потому что это не проблема, если я случайно выберу его ctrl-r или ctrl-p. - person csvoss; 22.10.2019
comment
Может быть, git clean -i работает только при вызове из корня рабочей копии? - person Alessandro Jacopson; 04.06.2020

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

person Fire Lancer    schedule 14.09.2008
comment
git clean -f 'неотслеживаемый путь к файлу' - person Hossain Mahmood Tuhin; 29.04.2021

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

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

git add --all
git reset --hard HEAD

person Thanga    schedule 03.06.2016
comment
Вы можете заменить git add --all на git add .. Таким образом, вы можете сделать это более коротким способом в oneline git add . && git reset --hard HEAD (будьте очень осторожны с этой командой). - person RousseauAlexandre; 30.03.2017
comment
Зачем использовать это вместо git clean? - person user2864740; 01.07.2017
comment
Потому что git clean, по-видимому, также удаляет все, что игнорируется. Он просто удалил мою node_modules папку. Это сначала обработает все файлы, кроме игнорируемых, а затем удалит их, выполнив сброс. Игнорируемые файлы не будут затронуты. - person Andreas; 19.09.2017
comment
@Andreas он не удаляет игнорируемые файлы для меня (git 2.14.1). Вы все равно должны запустить git clean -n, прежде чем выполнять настоящее удаление (или используйте _ 2_). - person Qw3ry; 26.09.2017
comment
@ Qw3ry git version 2.10.2.windows.1 здесь, странно. - person Andreas; 26.09.2017
comment
git clean удаляет игнорируемые файлы, только если вы используете параметр -x или -X, в противном случае он просто удаляет неотслеживаемые файлы. - person doubleDown; 26.09.2017
comment
@ user2864740 Если я правильно понимаю, эта опция не только удалит неотслеживаемые файлы, но и пользователи потеряют все изменения, которые они внесли в отслеживаемые файлы. Для тех, кто worked, они могут стремиться сбросить эти изменения помимо удаления неотслеживаемых файлов, хотя вопрос здесь не в этом. - person Varun Garg; 20.12.2017
comment
@RousseauAlexandre git add . добавляет только из текущего каталога вниз, тогда как git add --all применяется к репо. Последний вариант кажется более безопасным. - person TrueWill; 16.01.2018
comment
Вы должны зафиксировать любые изменения, которые хотите сохранить, перед запуском, поскольку он удалит их. - person Pants; 09.04.2018
comment
Замечательно ... Я уже запускал решение для своего коммита из stackoverflow.com/questions/927358/, и это все, что мне нужно. - person Cody; 18.09.2019
comment
Обязательно ли здесь указывать HEAD? Я пробовал без, и это сработало. - person Tore Aurstad; 04.08.2020

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

git clean -d -f -f

person Michał Szajbe    schedule 25.01.2013
comment
Кстати, это написано в документации: Git откажется удалять каталоги с .git sub каталог или файл, если не указан второй -f. Но все равно спасибо! - person Maxim Suslov; 24.07.2015
comment
Спасибо вам огромное. Это сводило меня с ума. - person m4heshd; 02.02.2021

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

РЕДАКТИРОВАТЬ: Также я нашел способ показать неотслеживаемый файл в тайнике (например, git show stash@{0}^3) https://stackoverflow.com/a/12681856/338986

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

person hiroshi    schedule 11.01.2014
comment
Вы можете объяснить -u на тайнике? Я не понимаю, как это работает по-другому от git stash save. Я попробовал это, и это сработало. Посмотрел git docs и тоже не нашел. - person Winnemucca; 17.10.2016
comment
-u эквивалентно --include-untracked. Вы можете найти помощь с git help stash. - person hiroshi; 18.10.2016
comment
@hiroshi Спасибо! после того, как попробовали все решения дюжины разных людей, это то, что наконец-то сработало ... уф! Даже git stash не нада. Сохранение - u позаботилось о неотслеживаемых. сбросить Hard / Clean Force / и т. д. ничего из этого не помогло мне. - person killjoy; 15.02.2017
comment
Опция save устарела в пользу push, которая делает то же самое, но больше. Вы можете прочитать больше здесь, https://stackoverflow.com/questions/44680028/whats-the-difference-between-git-stash-save-and-git-stash-push/44681952 - person Script Wolf; 24.10.2018

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

git clean -fdx

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

person Oscar Fraxedas    schedule 25.11.2013
comment
@Martin Одному из проектов, над которым я работаю, 8 лет, и более 80 разработчиков активно пишут код. Git иногда не может очистить его с первого прохода. - person Oscar Fraxedas; 29.02.2016
comment
Я могу подтвердить это, так что это все еще актуально в 2020 году. Мы также работаем над большим проектом, и мне пришлось запускать его 4-5 раз, пока GIT не нашел больше файлов для удаления. - person turbolocust; 17.04.2020

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

person Espo    schedule 14.09.2008

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

git clean -f {dir_path}

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

git clean -fxd {dir_path}

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

person Vijay C    schedule 24.09.2013

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

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

git clean -ffdx

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

git clean -fdx

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

git clean -fd

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

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

git clean -fdX

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

git clean
person Shital Shah    schedule 12.02.2017
comment
Этот ответ отлично работает! Вы всегда можете добавить параметр --dry-run, чтобы отобразить список файлов / папок, которые нужно удалить перед фиксацией действия. - person Honghao Zhang; 01.07.2021

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

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

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

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

git clean -fdXx

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

person Pooja    schedule 22.01.2015
comment
Команда git clean -fdXx выдает сообщение об ошибке fatal: -x и -X не могут использоваться вместе (с использованием git-2.8). В качестве последнего предложения в ответе укажите ссылку на руководство по git. Ваше здоровье - person oHo; 04.07.2016
comment
последовательно выполните две команды: git clean -fdX, git clean -fdx - person Clock ZHONG; 17.12.2018

Хорошо, удалить ненужные неотслеживаемые файлы и папки, используя git в командной строке, просто сделайте это следующим образом:

git clean -fd

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

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

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

git clean -f

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

git clean -fd

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

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

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

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

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


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

person Alireza    schedule 20.07.2017
comment
Что с этим изображением? - person Pacerier; 30.01.2020
comment
+ для удобного запоминания графики: D - person EKOlog; 02.04.2021

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

git clean -d -x -f

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

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

person Chhabilal    schedule 16.04.2015

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

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

person bit_cracker007    schedule 02.03.2017

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

git add .
git reset --hard HEAD

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

person thybzi    schedule 21.02.2016
comment
По крайней мере, это другой подход. :) Другой способ, который запомнил бы удаленные файлы в рефлоге, но не в каких-либо ветвях, был бы: git add . git commit -m 'about to delete' git reset --hard HEAD~ - person joeytwiddle; 01.03.2016
comment
еще более быстрый способ git add . && git reset --hard HEAD - person thybzi; 29.04.2016
comment
Это может быть не то, что вам нужно, если есть изменения, которые вы хотите зафиксировать. - person lacostenycoder; 10.02.2017
comment
@AlexanderMills git reset --hard сбрасывает все незавершенные изменения, НО НЕ ОТСЛЕЖИВАЕМЫЕ ФАЙЛЫ, в состояние последней фиксации. Вот почему нам сначала нужно git add . - это обрабатывает все неотслеживаемые файлы (чтобы они тоже сбрасывались) - person thybzi; 30.08.2017

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

git clean -ffdx

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

person rahul286    schedule 16.08.2016
comment
Спасибо. Я оставил -x и просто использовал git clean -ffd, чтобы не стирать файлы в .gitignore. - person Feckmore; 25.01.2017

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.

person Nikita Leonov    schedule 02.12.2015
comment
Кстати, вы можете просто сделать git clean {flags}: / так будет, как если бы вы выполнили команду в корне репо - person The-null-Pointer-; 24.06.2017

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

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

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

person JD Brennan    schedule 02.03.2016
comment
Это также удалит действительные изменения в отслеживаемых файлах. Я бы не рекомендовал это. - person code_dredd; 04.04.2016
comment
Да, сначала вы хотите зафиксировать изменения в отслеживаемых файлах. - person JD Brennan; 05.04.2016

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

git add .
git reset --hard HEAD
person Rajeev Shetty    schedule 20.05.2020

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

git clean -d -n

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

Удалит файл sample.txt

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

git clean -d -f

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

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

person Omar Mowafi    schedule 16.02.2016

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

git clean -fdn

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

git clean -fd
person Gaurav    schedule 25.10.2016

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

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

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

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

git clean -f -d -x

Также доступен интерактивный режим -i с командой clean

git clean -x -i

Альтернативно

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

git stash --all

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

git stash drop // or clean
person DevWL    schedule 21.10.2017
comment
тайник - хорошая идея, но вы можете использовать git stash save and type some comment as to what this stash was for - person lacostenycoder; 30.06.2019

Команда uggested для удаления неотслеживаемых файлов из 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. Это может быть полезно для восстановления всего с нуля, но сохранить файлы, созданные вручную.

person Mohideen bin Mohammed    schedule 01.09.2017
comment
Я думаю, у вас есть опечатка uggested, но это просто uggestion лол - person lacostenycoder; 30.06.2019

Обычная команда 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!
person kujiy    schedule 11.10.2016

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

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

person Vaisakh VM    schedule 16.02.2017

Мы можем легко удалить локальные неотслеживаемые файлы из текущего рабочего дерева 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
person Elangovan    schedule 04.12.2017
comment
Это также удалит изменения, подготовленные для фиксации, а не только неотслеживаемые файлы, что может быть не тем, что вам нужно. - person raspy; 08.05.2019
comment
Не работает: оставляет несколько файлов. git clean -ffdx это решение - person Eugene Gr. Philippov; 09.05.2019

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

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

(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)
person Sergey    schedule 25.09.2017
comment
конечно, это следует использовать с большой осторожностью - person lacostenycoder; 30.06.2019

git clean -f

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

git clean -fd

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

person Sudhir Vishwakarma    schedule 18.05.2018

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

person jenny    schedule 14.04.2021

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) для создания нетронутого рабочего каталога для тестирования чистой сборки.
person Jämes    schedule 02.11.2017
comment
Спасибо за отзыв, мое утверждение запутало. Я хотел сказать, что выделенные псевдонимы автоматически приходят с oh-my-zsh. Очевидно, они отлично работают в bash. Я отредактировал свой ответ, чтобы отразить это. - person Jämes; 01.06.2018

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

person Zia    schedule 10.11.2018

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

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

  1. Чтобы очистить только файлы [папки не будут отображаться и не будут очищаться]: $ git clean -i

  2. Чтобы очистить файлы и папки: $ git clean -d -i

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


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

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

person Gnanasekar S    schedule 16.12.2016

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

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

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

Все файлы и папки удалены из репозитория.

Давайте восстановим их на localhost, если они вам понадобятся:

  1. Снова переместите все файлы и папки, которые вы временно переместили в локальную папку проекта.
  2. Верните все строки об этих файлах и папках в .gitignore
  3. Git add.
  4. Git commit -m «Проверка того, что файлы больше не появляются в репозитории git»
  5. Git push

Вы сделали!

person Gediminas    schedule 16.08.2018

Чтобы удалить полные изменения, git clean -f -d

$ git clean -f -d
Removing client/app/helpers/base64.js
Removing files/
Removing package.json.bak

where 
-f is force 
-d is a directory 
person KARTHIKEYAN.A    schedule 10.11.2020

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

person Vivek    schedule 08.08.2017
comment
Чем это хоть как-то полезно? Он не удаляет файлы и ничего не делает с файлом, который не был зарегистрирован в репо. - person lacostenycoder; 30.06.2019

Если ничего не помогает, просто удалить все изменения, перечисленные командой "git status", можно использовать следующую комбинацию:

git add -A && git commit -m temp && git reset --hard HEAD^

Сначала будут выполнены все ваши изменения, затем будет создана временная фиксация, а затем она будет отменена.

person victorm1710    schedule 24.04.2019

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

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

#!/bin/bash
readarray -t -d '' FILES < <(git ls-files -z --other --directory)
if [ "$FILES" = "" ]; then
    echo  "Nothing to clean!"
    exit 0
fi
echo -e "Dirty files:\n"
printf '  %s\n' "${FILES[@]}"
DO_REMOVE=0
while true; do
    echo ""
    read -p "Remove ${#FILES[@]} files? [y/n]: " choice
    case "$choice" in
        y|Y )
            DO_REMOVE=1
            break ;;
        n|N )
            echo "Exiting!"
            break ;;
        * ) echo "Invalid input, expected [Y/y/N/n]"
            continue ;;
    esac
done

if [ "$DO_REMOVE" -eq 1 ];then
    echo "Removing!"
    for f in "${FILES[@]}"; do
        rm -rfv -- "$f"
    done
fi
person ideasman42    schedule 21.12.2019

использование: git clean [-d] [-f] [-i] [-n] [-q] [-e] [-x | -ИКС] [--] ...

-q, --quiet           do not print names of files removed
-n, --dry-run         dry run
-f, --force           force
-i, --interactive     interactive cleaning
-d                    remove whole directories
-e, --exclude <pattern>
                      add <pattern> to ignore rules
-x                    remove ignored files, too
-X                    remove only ignored files
person Samir Kape    schedule 26.08.2020

Я использую это:

  1. git status
  2. скопируйте путь к файлу
  3. rm <path of file>

В моем проекте много сгенерированных файлов, созданных гигантским скриптом сборки ANT. Использование git clean приведет к хаосу.

person Thirdy    schedule 10.06.2019