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

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

Эта интерактивная шпаргалка по git ndpsoftware.com/git-cheatsheet.html показывает рабочую область git (Google дает лучшие результаты с "рабочей областью", чем с "рабочей копией").

qneill 01.02.2013 19:43

Примечание: если вы хотите удалить только неотслеживаемые файлы немного, но не все они, git clean теперь имеет режим интерактивный! См. мой ответ на этот другой вопрос: git 1.8.4+

VonC 23.07.2013 10:00

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

Pavel Šimerda 15.09.2014 02:28

Прежде чем опубликовать новый ответ, подумайте, что на этот вопрос уже есть более 25 ответов. Убедитесь, что ваш ответ соответствует тому, чего нет среди существующих ответов.

Sazzad Hissain Khan 15.06.2017 18:30

Чтобы прояснить понимание непосвященных и новичков в Git - запустите git status, и если он показывает файл как неотслеживаемый, и вы не хотите, чтобы этот файл в репо, вы можете просто перейти в свою файловую систему и удалить или переместить его. . Это не повредит вашему локальному репо или Git. Вы также можете использовать git clean или некоторые его варианты в ответах ниже, включая интерактивную версию для удаления только выборочных файлов, но интерактивный режим может быть утомительным. Что бы вы ни делали, убедитесь, что вы понимаете, что удалит git clean, или используйте --dry-run, чтобы он сообщал вам, ничего не удаляя.

LightCC 02.09.2017 09:15

Если файлы еще не отслеживаются, не могли бы вы просто удалить их без git? rm files-to-be-deleted

mhatch 14.03.2018 23:48

Я бы спрятал его на случай, если вам понадобится снова их использовать и очистить, используйте git clean: more deatils: git-scm.com/docs/git-clean

Cafebabe 20.06.2018 23:44

@ User1291 вы потеряете все свои локальные ветки и тайники, если будете клонировать заново в другом каталоге.

Abdul Rauf 13.07.2018 08:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7 182
8
2 434 098
39
Перейти к ответу Данный вопрос помечен как решенный

Ответы 39

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

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

Ответ принят как подходящий

git-clean - Remove untracked files from the working tree

Synopsis

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

Description

Cleans the working tree by recursively removing files that are not under version control, starting from the current directory.

Normally, only files unknown to Git are removed, but if the -x option is specified, ignored files are also removed. This can, for example, be useful to remove all build products.

If any optional <path>... arguments are given, only those paths are affected.


Шаг 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 для получения дополнительной информации.


Options

-f, --force

If the Git configuration variable clean.requireForce is not set to false, git clean will refuse to run unless given -f, -n or -i.

-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.

-X

Remove only files ignored by Git. This may be useful to rebuild everything from scratch, but keep manually created files.

-n, --dry-run

Don’t actually remove anything, just show what would be done.

-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.

git clean -f работает только в каталоге, в котором он вызван (и подкаталогах). Если вы хотите очистить всю рабочую копию, вы должны вызвать ее в ее корневом каталоге.

Eduardo Bezerra 08.03.2013 14:51

Как мне включить игнорируемые каталоги / файлы?

Jürgen Paul 14.05.2013 16:39

Он также удаляет все файлы внутри .gitignore. Мне нужно удалить только новые файлы / папки, а не в .gitignore

Kostanos 06.08.2013 03:02

@Kostanos Если вы не хотите удалять файлы в .gitignore, не указывайте флаг -x.

Lo-Tan 23.08.2013 22:44

Обратите внимание, что флаги -x или -X удаляют файлы, игнорируемые .gitignore, но не те, которые игнорируются update-index --assume-unchanged.

Ville 06.11.2013 02:52

Извините, если я чего-то упускаю, но отличается ли git clean -f от простого удаления файла?

maan81 30.09.2014 13:49

git clean -f :/ работает так, как если бы вы запустили его в корневом каталоге репозитория. См. Также более поздние ответы, также учитывающие подмодули с git clean -ffxd :/

here 17.10.2014 00:38

Количество голосов говорит о том, насколько важно иметь более интуитивную команду. Что-то вроде git remove untracked или git remove_untracked

Ich 07.05.2015 23:26

@Michelle git clean -xfd также УДАЛЯЕТ ВСЕ ФАЙЛЫ, В настоящее время ИГНОРИРОВАННЫЕ В ВАШЕМ .gitignore, и они не подлежат восстановлению.

thedanotto 20.11.2015 08:36

@Michelle: Приятно написать, что на самом деле он делает: он удаляет все файлы, которые были в списке gitignore, и я узнал об этом после неудачного опыта.

Akash KC 05.06.2016 15:52

@ maan81, ты прав. git clean -f ничем не отличается от простого удаления файла. Но это не делает его бесполезным, как я, возможно, ошибочно, вы подразумеваете. Когда у вас много артефактов сборки, то есть сотни файлов в десятках каталогов, «просто удалить» их может оказаться не так уж и «просто». Вам придется написать сценарий. Это то, что делает для вас git clean -f, поскольку он точно знает, какие файлы относятся к репо, а какие нет.

Alexander Amelkin 03.07.2017 13:24

Use -f option twice if you really want to remove such a directory. вот что я искал! Благодарность!

Kevin Friedheim 17.07.2017 21:14

После борьбы и проклятий в течение 45 минут я нашел комментарий @ EduardoBezerra ... Я думаю, OP должен отредактировать свой ответ, чтобы подчеркнуть поведение git clean - удаление только материалов в каталоге, в котором вы находитесь, и его подкаталогах. Это неясно из git help или из самого ответа.

Motti Shneor 20.09.2018 18:43

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

Bharat 02.08.2019 12:40

git clean -fd был волшебной частью вашего ответа, мне нужно было удалить все неотслеживаемые файлы из каталогов и!

Gabriel Staples 18.03.2020 03:27

Обратите внимание, что git clean работает на уровне каталогов, а не на уровне репо. Поэтому, если вы запустите git clean внутри каталога в репо, он будет очищать только рекурсивно в каталоге.

zed 14.05.2020 17:59

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

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

    git clean -n
    

    или же

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

    git clean -fd
    

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

Как указывалось ранее, его можно испытать всухую с git clean -n -d.

Ms01 09.12.2013 14:54

То же самое делать с git clean -nd и git clean -fd.

Micer 10.07.2017 12:13

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

git clean -d -f -f

Кстати, это написано в документация: Git откажется удалять каталоги с подкаталогом или файлом .git, если не указан второй -f. Но все равно спасибо!

Maxim Suslov 24.07.2015 12:03

Спасибо огромное. Это сводило меня с ума.

m4heshd 02.02.2021 04:19

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

git clean -f {dir_path}

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

git clean -fxd {dir_path}

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

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

git clean -fdx

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

@Martin Одному из проектов, над которым я работаю, 8 лет, и более 80 разработчиков активно пишут код. Git иногда не может очистить его с первого прохода.

Oscar Fraxedas 29.02.2016 16:10

Я могу подтвердить это, так что это все еще актуально в 2020 году. Мы также работаем над большим проектом, и мне пришлось запускать его 4-5 раз, пока GIT не нашел больше файлов для удаления.

turbolocust 17.04.2020 09:37

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

git clean -i

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

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

git iclean

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

@ pal4life Он был добавлен в 1.8.4, возможно, вы используете старую версию git? github.com/git/git/blob/master/Documentation/RelNotes/1.8.4.‌ txt

Mattias Backman 30.09.2014 16:37

Мне это нравится - мне удобнее иметь его в моей истории bash, чем любой из других вариантов, потому что это не проблема, если я случайно выберу его ctrl-r или ctrl-p.

csvoss 22.10.2019 01:38

Может быть, git clean -i работает только при вызове из корня рабочей копии?

Alessandro Jacopson 04.06.2020 13:43

Мне нравится 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.

Вы можете объяснить -u на тайнике? Я не понимаю, как это работает по-другому от git stash save. Я попробовал это, и это сработало. Посмотрел git docs и тоже не нашел.

Winnemucca 17.10.2016 23:52

-u эквивалентен --include-untracked. Вы можете найти помощь по git help stash.

hiroshi 18.10.2016 11:55

@hiroshi Спасибо! после того, как попробовали все решения дюжины разных людей, это то, что наконец сработало ... уф! Даже git stash не подействовал. Сохранение - u позаботилось о неотслеживаемых. сбросить Hard / Clean Force / и т. д. ничего из этого не помогло мне.

killjoy 15.02.2017 19:26

Опция save устарела в пользу push, который делает то же самое, но больше. Вы можете прочитать больше здесь, https://stackoverflow.com/questions/44680028/whats-the-diffe‌ rence-between-git-st‌ ash-save-and-git-sta‌ sh-push / 44681952

Script Wolf 24.10.2018 18:51

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

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

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

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

git clean -fdXx

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

Команда git clean -fdXx выдает сообщение об ошибке "фатальный: -x и -X не могут использоваться вместе" (с использованием git-2.8). В качестве последнего предложения в ответе укажите ссылку на руководство по git. Ваше здоровье

oHo 04.07.2016 19:23

последовательно выполните две команды: git clean -fdX, git clean -fdx

Clock ZHONG 17.12.2018 08:19

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

git clean -d -x -f

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

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

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.

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

The-null-Pointer- 24.06.2017 22:07

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

git clean -d -n

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

Удалил бы файл sample.txt

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

git clean -d -f

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

Удаление sample.txt

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

git add .
git reset --hard HEAD

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

По крайней мере, это другой подход. :) Другой способ запомнить удаленные файлы в рефлоге, но не в каких-либо ветвях: git add .git commit -m 'about to delete'git reset --hard HEAD~

joeytwiddle 01.03.2016 09:10

еще более быстрый способ - git add . && git reset --hard HEAD

thybzi 29.04.2016 21:25

git add . && git reset --hard

Pleymor 19.07.2016 14:35

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

lacostenycoder 10.02.2017 23:00

@AlexanderMills git reset --hard сбрасывает все незафиксированные изменения, НО НЕ ОТСЛЕЖИВАЕМЫЕ ФАЙЛЫ, в состояние последней фиксации. Вот почему нам сначала нужен git add . - который обрабатывает все неотслеживаемые файлы (поэтому они тоже сбрасываются)

thybzi 30.08.2017 14:54

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

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

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

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

code_dredd 04.04.2016 20:06

Да, сначала вы захотите зафиксировать изменения в отслеживаемых файлах.

JD Brennan 05.04.2016 03:01

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

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

git add --all
git reset --hard HEAD

Вы можете заменить git add --all на git add .. Таким образом, вы можете сделать это более коротким способом в онлайн-версии git add . && git reset --hard HEAD(будьте осторожны с очень с этой командой).

RousseauAlexandre 30.03.2017 16:35

Зачем использовать это вместо git clean?

user2864740 01.07.2017 00:59

Потому что git clean, по-видимому, также удаляет все, что игнорируется. Он просто удалил мою папку node_modules. Это сначала обработает все файлы, кроме игнорируемых, а затем удалит их, выполнив сброс. Игнорируемые файлы не будут затронуты.

Andreas 19.09.2017 10:54

@Andreas он не удаляет игнорируемые файлы для меня (git 2.14.1). Вы должны запустить git clean -n в любом случае перед выполнением настоящего удаления (или используйте git clean -i).

Qw3ry 26.09.2017 14:12

@ Qw3ry git version 2.10.2.windows.1, странно.

Andreas 26.09.2017 16:52

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

doubleDown 26.09.2017 23:17

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

Varun Garg 20.12.2017 20:15

@RousseauAlexandre git add . рекламирует только из текущего каталога и ниже, тогда как git add --all применяется к репо. Последний вариант кажется более безопасным.

TrueWill 16.01.2018 22:09

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

Pants 09.04.2018 18:20

Замечательно ... Я уже запускал решение для своего коммита из stackoverflow.com/questions/927358/…, и это все, что мне было нужно.

Cody 18.09.2019 19:38

Обязательно ли здесь указывать HEAD? Я пробовал без, и это сработало.

Tore Aurstad 04.08.2020 19:06

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

git clean -ffdx

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

Спасибо. Я не стал использовать -x и просто использовал git clean -ffd, чтобы не стирать файлы в .gitignore.

Feckmore 25.01.2017 20:46

Обычная команда 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 clean -fdn

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

git clean -fd

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

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

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

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

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


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

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

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

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

git clean -ffdx

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

git clean -fdx

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

git clean -fd

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

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

git clean -fdX

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

git clean

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

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

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

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 для force
-d для каталога
-x для игнорируемых файлов (добавьте, если требуется)

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

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

Что с этим изображением?

Pacerier 30.01.2020 18:27

использовать git reset HEAD <file> для деактивации файла

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

lacostenycoder 30.06.2019 18:43

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 или -я.

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

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

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

Я думаю, у вас есть опечатка uggested, но это просто "uggestion lol

lacostenycoder 30.06.2019 18:44

Clean out git repository and all submodules recursively

The following command will clean out the current git repository and all its submodules recursively:

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

конечно, это следует использовать с большой осторожностью

lacostenycoder 30.06.2019 18:45

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

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

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

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

git clean -f -d -x

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

git clean -x -i

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

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

git stash --all

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

git stash drop // or clean

тайник - хорошая идея, но вы можете использовать git stash save and type some comment as to what this stash was for

lacostenycoder 30.06.2019 18:46

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

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

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

Спасибо за отзыв, мое утверждение сбивает с толку. Я хотел сказать, что выделенные псевдонимы автоматически приходят с oh-my-zsh. Они явно отлично работают в bash. Я отредактировал свой ответ, чтобы отразить это.

Jämes 01.06.2018 02:35

Мы можем легко удалить локальные неотслеживаемые файлы из текущего рабочего дерева 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

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

raspy 08.05.2019 13:26

Не работает: оставляет несколько файлов. git clean -ffdx - это решение

Eugene Gr. Philippov 09.05.2019 17:17

git clean -f

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

git clean -fd

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

I haved failed using most popular answers here - git doesn't delete untracked files from the repository anyway. No idea why. This is my super simplified answer without SPECIAL GIT COMMANDS!

Миссия: удалить неотслеживаемые файлы из репозитория 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

Вы сделали!

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

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

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

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

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

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

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

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

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

#!/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

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

git add .
git reset --hard HEAD

использование: 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

Для удаления полных изменений 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 

Другие вопросы по теме