Git удаляет неотслеживаемые файлы

Обновлено: 03.07.2024

По сравнению с reset или revert , которые также являются классическими командами отмены, git clean отличается: он нацелен на неотслеживаемые файлы, которые еще не были добавлены в систему управления версиями.

Когда использовать команду git clean

Допустим, вы загнали себя в тупик и хотите начать заново с чистой рабочей копии. git reset --hard — классическая команда в этой ситуации, но она отменяет изменения только в отслеживаемых файлах (то есть файлах, которые уже находятся под контролем версий).

Чтобы избавиться от новых/неотслеживаемых файлов, вам придется использовать git clean !

Примеры использования и варианты

Давайте рассмотрим пример сценария:

Какие бы опции и параметры вы ни указали: использование git clean повлияет только на неотслеживаемые файлы — в нашем примере img/iconFacebook.jpg и login.html — и оставит без изменений все остальное.

Шпаргалка Git

Не нужно запоминать все эти команды и параметры: получите нашу популярную «Шпаргалку по Git» — бесплатно!

Начнем с пробного прогона

Прежде чем использовать git clean для удаления неотслеживаемых файлов, следует помнить одну важную деталь: неотслеживаемые файлы по определению не включаются в систему контроля версий, а это означает, что при их удалении вы не сможете их восстановить!

Вот почему первым шагом при работе с git clean является использование его функции "пробного запуска" с использованием флага "-n":

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

Удаление файлов с помощью параметра -f

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

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

По умолчанию папки сами не удаляются. Если вы хотите включить их, вы можете использовать флаг "-d":

В некоторых случаях помимо неотслеживаемых файлов может потребоваться удалить любые игнорируемые файлы. Примером использования этого может быть случай, когда вы хотите очистить папку, содержащую артефакты сборки. Использование флага "-x" позволяет включать игнорируемые элементы:

Всегда сначала используйте пробный прогон

Независимо от того, какую комбинацию параметров вам нужно использовать для вашего конкретного случая использования: всегда рекомендуется сначала выполнить "пробный запуск" с флагом "-n"!

Подробнее

  • Познакомьтесь с главой «Отмена действий» в нашей бесплатной онлайн-книге.
  • Часто задаваемые вопросы о Git и управлении версиями

Получите нашу популярную памятку по Git бесплатно!

Самые важные команды вы найдете на лицевой стороне, а полезные советы — на обратной. Более 100 000 разработчиков скачали его, чтобы сделать Git немного проще.

О нас

Как создатели Tower, лучшего клиента Git для Mac и Windows, мы помогаем более чем 100 000 пользователей в таких компаниях, как Apple, Google, Amazon, Twitter и Ebay, получить максимальную отдачу от Git.

Как и в случае с Tower, наша миссия с этой платформой – помочь людям стать лучшими профессионалами.

Вот почему мы бесплатно предоставляем наши руководства, видеоролики и памятки (об управлении версиями в Git и многих других темах).

© Tower, 2010-2022. Упомянутые названия продуктов и логотипы являются собственностью соответствующих владельцев.

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


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

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

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

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

41 Ответ 41

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

Краткий обзор

Описание

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

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

Если какой-либо необязательный

. заданы аргументы, затрагиваются только эти пути.

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

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

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

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

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

Если есть необязательные

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

ВАРИАНТЫ

Обычно, когда нет

, git clean не будет возвращаться к неотслеживаемым каталогам, чтобы не удалить слишком много. Укажите -d, чтобы он также рекурсировал в такие каталоги. Если указаны какие-либо пути, -d не имеет значения; все неотслеживаемые файлы, соответствующие указанным путям (за исключением вложенных каталогов git, упомянутых в --force ), будут удалены.

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

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

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

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

Используйте указанный шаблон исключения в дополнение к стандартным правилам игнорирования (см. gitignore[5]).

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

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

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

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

Цикл команд показывает список доступных подкоманд и выдает подсказку "Что теперь>". Как правило, когда подсказка заканчивается одним >, вы можете выбрать только один из предложенных вариантов и ввести return, например:

Вы также можете сказать c или clean выше, если выбор уникален.

Основной цикл команд состоит из 6 подкоманд.

Начать очистку файлов и каталогов, а затем выйти.

фильтровать по шаблону

Это показывает файлы и каталоги, которые нужно удалить, и выдает приглашение «Введите шаблоны игнорирования >>». Вы можете ввести шаблоны, разделенные пробелами, чтобы исключить файлы и каталоги из удаления. Например. "*.c *.h" исключает из удаления файлы, оканчивающиеся на ".c" и ".h". Когда вы будете удовлетворены отфильтрованным результатом, нажмите ENTER (пусто), чтобы вернуться в главное меню.

выбрать по номерам

Это показывает файлы и каталоги, которые нужно удалить, и выводит запрос «Выберите элементы для удаления>>». Когда подсказка заканчивается двойным >>, как здесь, вы можете сделать более одного выбора, объединенного пробелом или запятой. Также вы можете сказать диапазоны. Например. "2-5 7,9" для выбора 2,3,4,5,7,9 из списка. Если второе число в диапазоне опущено, выбираются все оставшиеся элементы. Например. "7-" для выбора 7,8,9 из списка. Вы можете сказать *, чтобы выбрать все. Также, когда вы удовлетворены отфильтрованным результатом, нажмите ENTER (пусто) для возврата в главное меню.

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

При управлении версиями проекта с помощью Git файлы могут переходить из одного состояния в другое. Один из них — когда файл не отслеживается, то есть Git может «видеть» там новый файл, но не версионирует его активно. Вам часто приходится удалять неотслеживаемые файлы, так как же вы это делаете?

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

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

Разобравшись с этим, приступим.

Что такое неотслеживаемые файлы?

Неотслеживаемые файлы — это файлы, которые еще не версионированы — «отслежены» — Git. Это состояние новых файлов, которые вы добавляете в свой репозиторий.

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

Зачем удалять неотслеживаемые файлы?

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

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

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

Наконец, у вас часто есть файлы, которые должны присутствовать в папке репозитория, но для которых не следует создавать версии. Артефакты сборки и отдельные файлы конфигурации — два классических примера. В этих случаях вы не должны удалять файлы, а игнорировать их. Подробнее об этом позже.

Git удаляет неотслеживаемые файлы: как?

Отбросив вопросы "что" и "почему", настало время "как".

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

Правильное решение — использовать команду git clean.

Git Clean спешит на помощь

Git clean — менее известная команда git. Вы можете использовать его для одновременной очистки всех неотслеживаемых файлов.

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

Начните с создания репозитория. В примерах мы будем использовать один и тот же репозиторий.

mkdir untracked-files-tutorial
cd untracked-files-tutorial
git init

Принудительное выполнение команды Clean git clean -f

Параметр -f используется для форсирования. Это принудительно удаляет файлы. Давайте посмотрим на пример.

В только что созданном репозитории создайте новый файл:

эхо привет > файл.txt

Теперь, если вы запустите git status, вы увидите такой результат:

Неотслеживаемые файлы:
(используйте "git add . ", чтобы включить в то, что будет зафиксировано)
file.txt

для фиксации ничего не добавлено, но присутствуют неотслеживаемые файлы (используйте "git add" для отслеживания)

Git сообщает нам, что файл не отслеживается, и даже указывает, как включить его в следующую фиксацию. Мы этого не делаем, конечно. Вместо этого запустите это:

Вы получите такой результат:

Вот и все. Файл исчез. Чтобы убедиться в этом, вы можете использовать git status или даже ls/dir.

Имитация очистки git clean -n

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

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

Результат таков:

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

На этот раз, если вы используете git status или ls/dir, вы увидите, что файл остается там.

Интерактивная очистка с помощью git clean -i

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

Для этого примера создайте два файла, всего три (вы не удалили файл из последнего примера, помните?).

Теперь запустите git clean -i, чтобы увидеть следующее меню:

Как видите, помимо отображения меню параметров, доступ к которому можно получить, введя соответствующий номер или первую букву параметра, Git сообщает, какие файлы будут удалены, если вы продолжите операцию.

Давайте рассмотрим каждый вариант.

Очистить

Первый вариант чистый. Он стирает файлы:

Удаление файла.txt
Удаление файла2.txt
Удаление файла3.txt

Фильтровать по шаблону

Эта опция позволяет вам вводить шаблоны, которые Git будет игнорировать.

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

После выбора опции фильтрации по шаблону вы увидите что-то вроде этого:

Допустим, я хочу, чтобы Git игнорировал файлы с расширением .md. Я наберу это:

Затем Git отображает файлы, не отфильтрованные по шаблону:

Теперь я могу просто нажать Enter, чтобы вернуться в главное меню, где я могу решить судьбу этих двух файлов.

Выбрать по номерам

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

Если вы введете что-то отличное от трех цифр, Git несколько шутливо попросит вас сделать это еще раз:

С другой стороны, если вы нажмете Enter без ввода действительного числа, Git просто скажет: "Файлы для очистки больше не нужны, выход" и завершит работу.

Чтобы действительно удалить один или несколько файлов, просто введите соответствующие цифры. Вы можете ввести одно число или несколько чисел, разделенных пробелом или запятой. Также можно использовать диапазон (например, 1-3) или *, чтобы обозначить все.

В нашем случае давайте удалим первые два файла:

Как видите, выбранные файлы помечены для исключения. Нажмите Enter для подтверждения. Вы вернетесь в главное меню, где сможете продолжить исключение.

Спросите каждого

Эта опция проведет вас по каждому файлу, спрашивая, исключить его или нет. Вы можете ответить на него с помощью y или n:

Что теперь? 4
Удалить file.txt [да/нет]? n
Удалить файл2.txt [да/нет]? n
Удалить файл3.txt [да/нет]? y
Удаление файла3.txt

Используйте этот вариант, если передумали удалять файлы. Просто нажмите 5 или букву q, и Git отобразит сообщение «Пока» и не причинит вреда файлам.

Наконец, этот параметр, доступ к которому можно получить с помощью h или 6, отображает полезный, но краткий экран справки:

Git Удалить неотслеживаемые файлы: идем дальше

Рассмотрев основы операции «Git удалить неотслеживаемые файлы», давайте теперь углубимся и объясним еще несколько тем, которые могут пригодиться.

Принудительная очистка по умолчанию

Помните, я говорил, что по умолчанию git clean без аргументов не работает. Что ж, это правда, но вы можете это изменить.

Это связано с конфигурацией clean.requireForce, и вы можете изменить ее с помощью команды git config.

git config clean.requireForce false

Теперь запуск git clean удалит неотслеживаемые файлы без ошибок и без каких-либо запросов. Используйте его с осторожностью.

При желании вы можете использовать параметр --global, чтобы конфигурация применялась ко всем репозиториям.

Игнорирование файлов

Распространенный сценарий возникает, когда вы не хотите избавляться от неверсированных файлов. Вы хотите хранить их там, в папке проекта, но не создавать их версии.

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

Было бы невозможно подробно описать .gitignore, но вы всегда можете обратиться к документации. Хорошая новость заключается в том, что в большинстве случаев вам не нужно создавать файл .gitignore самостоятельно. Многие фреймворки уже добавляют их по умолчанию при запуске нового приложения; IDE также могут генерировать их. Наконец, существуют сайты и общедоступные репозитории, предназначенные для того, чтобы сделать файлы .gitignore доступными для различных языков и экосистем.

Git: удаляйте неотслеживаемые файлы на свой страх и риск

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

В вашей среде IDE или текстовом редакторе может быть предусмотрен способ восстановления файла; возможно, у вас есть какая-то форма резервного копирования на вашем компьютере, которая может вас спасти. Однако, что касается Git, вам не повезло.

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

Читайте также: