Что позволяет сделать команда git clean
Перейти к содержимому

Что позволяет сделать команда git clean

  • автор:

git-clean(1) Manual Page

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 <pathspec>. arguments are given, only those paths that match the pathspec are affected.

OPTIONS

Normally, when no <pathspec> is specified, git clean will not recurse into untracked directories to avoid removing too much. Specify -d to have it recurse into such directories as well. If a <pathspec> is specified, -d is irrelevant; all untracked files matching the specified paths (with exceptions for nested git directories mentioned under —force ) will be removed.

If the Git configuration variable clean.requireForce is not set to false, git clean will refuse to delete files or directories unless given -f or -i. Git will refuse to modify untracked nested git repositories (directories with a .git subdirectory) unless a second -f is given.

Show what would be done and clean files interactively. See “Interactive mode” for details.

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

Be quiet, only report errors, but not the files that are successfully removed.

Use the given exclude pattern in addition to the standard ignore rules (see gitignore(5)).

Don’t use the standard ignore rules (see gitignore(5)), but still use the ignore rules given with -e options from the command line. This allows removing all untracked files, including build products. This can be used (possibly in conjunction with git restore or git reset) to create a pristine working directory to test a clean build.

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

Interactive mode

When the command enters the interactive mode, it shows the files and directories to be cleaned, and goes into its interactive command loop.

The command loop shows the list of subcommands available, and gives a prompt «What now> «. In general, when the prompt ends with a single >, you can pick only one of the choices given and type return, like this:

You also could say c or clean above as long as the choice is unique.

The main command loop has 6 subcommands.

Start cleaning files and directories, and then quit.

filter by pattern

This shows the files and directories to be deleted and issues an «Input ignore patterns>>» prompt. You can input space-separated patterns to exclude files and directories from deletion. E.g. «*.c *.h» will excludes files end with «.c» and «.h» from deletion. When you are satisfied with the filtered result, press ENTER (empty) back to the main menu.

select by numbers

This shows the files and directories to be deleted and issues an «Select items to delete>>» prompt. When the prompt ends with double >> like this, you can make more than one selection, concatenated with whitespace or comma. Also you can say ranges. E.g. «2-5 7,9» to choose 2,3,4,5,7,9 from the list. If the second number in a range is omitted, all remaining items are selected. E.g. «7-» to choose 7,8,9 from the list. You can say * to choose everything. Also when you are satisfied with the filtered result, press ENTER (empty) back to the main menu.

This will start to clean, and you must confirm one by one in order to delete items. Please note that this action is not as efficient as the above two actions.

This lets you quit without do cleaning.

Show brief usage of interactive git-clean.

CONFIGURATION

Everything below this line in this section is selectively included from the git-config(1) documentation. The content is the same as what’s found there:

A boolean to make git-clean do nothing unless given -f, -i or -n. Defaults to true.

Что позволяет сделать команда git clean

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 <pathspec>. arguments are given, only those paths that match the pathspec are affected.

OPTIONS

Normally, when no <pathspec> is specified, git clean will not recurse into untracked directories to avoid removing too much. Specify -d to have it recurse into such directories as well. If a <pathspec> is specified, -d is irrelevant; all untracked files matching the specified paths (with exceptions for nested git directories mentioned under —force ) will be removed.

If the Git configuration variable clean.requireForce is not set to false, git clean will refuse to delete files or directories unless given -f or -i. Git will refuse to modify untracked nested git repositories (directories with a .git subdirectory) unless a second -f is given.

Show what would be done and clean files interactively. See “Interactive mode” for details.

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

Be quiet, only report errors, but not the files that are successfully removed.

Use the given exclude pattern in addition to the standard ignore rules (see gitignore[5]).

Don’t use the standard ignore rules (see gitignore[5]), but still use the ignore rules given with -e options from the command line. This allows removing all untracked files, including build products. This can be used (possibly in conjunction with git restore or git reset) to create a pristine working directory to test a clean build.

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

Interactive mode

When the command enters the interactive mode, it shows the files and directories to be cleaned, and goes into its interactive command loop.

The command loop shows the list of subcommands available, and gives a prompt «What now> «. In general, when the prompt ends with a single >, you can pick only one of the choices given and type return, like this:

You also could say c or clean above as long as the choice is unique.

The main command loop has 6 subcommands.

Start cleaning files and directories, and then quit.

filter by pattern

This shows the files and directories to be deleted and issues an «Input ignore patterns>>» prompt. You can input space-separated patterns to exclude files and directories from deletion. E.g. «*.c *.h» will excludes files end with «.c» and «.h» from deletion. When you are satisfied with the filtered result, press ENTER (empty) back to the main menu.

select by numbers

This shows the files and directories to be deleted and issues an «Select items to delete>>» prompt. When the prompt ends with double >> like this, you can make more than one selection, concatenated with whitespace or comma. Also you can say ranges. E.g. «2-5 7,9» to choose 2,3,4,5,7,9 from the list. If the second number in a range is omitted, all remaining items are selected. E.g. «7-» to choose 7,8,9 from the list. You can say * to choose everything. Also when you are satisfied with the filtered result, press ENTER (empty) back to the main menu.

This will start to clean, and you must confirm one by one in order to delete items. Please note that this action is not as efficient as the above two actions.

This lets you quit without do cleaning.

Show brief usage of interactive git-clean.

CONFIGURATION

Everything below this line in this section is selectively included from the git-config[1] documentation. The content is the same as what’s found there:

A boolean to make git-clean do nothing unless given -f, -i or -n. Defaults to true.

7.3 Инструменты Git — Припрятывание и очистка

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

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

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

Команда git stash save не исчезнет в ближайшее время, поэтому не беспокойтесь о её внезапной пропаже. Но вы можете начать переход на push для использования новой функциональности.

Припрятывание ваших наработок

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

Теперь вы хотите сменить ветку, но пока не хотите фиксировать ваши текущие наработки; поэтому вы припрячете эти изменения. Для того, чтобы припрятать изменение в выделенное для этого специальное хранилище, выполните git stash или git stash push :

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

В данный момент вы можете легко переключать ветки и работать в любой; ваши изменения сохранены. Чтобы посмотреть список припрятанных изменений, вы можете использовать git stash list :

В данном примере, предварительно были припрятаны два изменения, поэтому теперь вам доступны три различных отложенных наработки. Вы можете применить только что припрятанные изменения, используя команду, указанную в выводе исходной команды: git stash apply . Если вы хотите применить одно из предыдущих припрятанных изменений, вы можете сделать это, используя его имя, вот так: git stash apply stash@ <2>. Если вы не укажете имя, то Git попытается восстановить самое последнее припрятанное изменение:

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

Спрятанные изменения будут применены к вашим файлам, но файлы, которые вы ранее добавляли в индекс, не будут добавлены туда снова. Для того, чтобы это было сделано, вы должны запустить git stash apply с опцией —index , при которой команда попытается восстановить изменения в индексе. Если вы выполните команду таким образом, то полностью восстановите ваше исходное состояние:

Команда apply только пытается восстановить припрятанные наработки — при этом они останутся в хранилище. Для того, чтобы удалить их, вы можете выполнить git stash drop , указав имя удаляемых изменений:

Вы также можете выполнить git stash pop , чтобы применить припрятанные изменения и тут же удалить их из хранилища.

Необычное припрятывание

У припрятанных изменений есть несколько дополнительных вариантов использования, которые также могут быть полезны. Первый — это использование довольно популярной опции —keep-index с командой git stash . Она просит Git не только припрятать то, что вы уже добавили в индекс, но одновременно оставить это в индексе.

Другой распространённый вариант, который вы, возможно, захотите использовать — это припрятать помимо отслеживаемых файлов также и неотслеживаемые. По умолчанию git stash будет сохранять только изменённые и проиндексированные отслеживаемые файлы. Если вы укажете опцию —include-untracked или -u , Git также припрячет все неотслеживаемые файлы, которые вы создали. Однако включение этой опции по-прежнему не будет прятать файлы с явным игнорированием; чтобы дополнительно припрятать игнорируемые файлы, используйте —all (или просто -a ).

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

Создание ветки из припрятанных изменений

Если вы спрятали некоторые изменения, оставили их на время, а сами продолжили работать в той же ветке, у вас могут возникнуть проблемы с восстановлением наработок. Если восстановление будет затрагивать файл, который уже был изменён с момента сохранения наработок, то вы получите конфликт слияния и должны будете попытаться разрешить его. Если вам нужен более простой способ снова протестировать припрятанные изменения, вы можете выполнить команду git stash branch , которая создаст для вас новую ветку, перейдёт на коммит, на котором вы были, когда прятали свои наработки, применит на нём эти наработки и затем, если они применились успешно, удалит эти припрятанные изменения:

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

Очистка рабочего каталога

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

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

Вам нужно быть очень аккуратными с этой командой, так как она предназначена для удаления неотслеживаемых файлов из вашего рабочего каталога. Даже если вы передумаете, очень часто нельзя восстановить содержимое таких файлов. Более безопасным вариантом является использование команды git stash —all для удаления всего, но с сохранением этого в виде припрятанных изменений.

Предположим, вы хотите удалить мусор и очистить ваш рабочий каталог; вы можете сделать это с помощью git clean . Для удаления всех неотслеживаемых файлов в вашем рабочем каталоге, вы можете выполнить команду git clean -f -d , которая удалит все файлы и также все каталоги, которые в результате станут пустыми. Параметр -f (сокращение от слова force — заставить) означает принудительное удаление, подчеркивая, что вы действительно хотите это сделать, и требуется, если переменная конфигурации Git clean.requireForce явным образом не установлена в false .

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

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

Если вы не знаете, что сделает при запуске команда git clean , всегда сначала выполняйте её с опцией -n , чтобы проверить дважды, перед заменой -n на -f и выполнением настоящей очистки. Другой способ, который позволяет вам более тщательно контролировать сам процесс — это выполнение команды с опцией -i (в «интерактивном» режиме).

Ниже выполнена команда очистки в интерактивном режиме.

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

Существует причудливая ситуация, когда вам, возможно, придется проявить особую настойчивость, попросив Git очистить ваш рабочий каталог. Если вы оказались в рабочем каталоге, в который вы скопировали или клонировали другие репозитории Git (возможно, в виде подмодулей), даже git clean -fd откажется удалить эти каталоги. В таких случаях вам нужно добавить второй параметр -f для акцентирования.

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

Файлы в рабочем каталоге Git можно отслеживать или нет.

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

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

В этой статье объясняется, как удалить неотслеживаемые файлы в Git.

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

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

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

Перед запуском фактической команды и удалением неотслеживаемых файлов и каталогов используйте параметр -n , который выполнит «пробный запуск» и покажет вам, какие файлы и каталоги будут удалены:

Результат будет выглядеть примерно так:

Если некоторые из файлов, перечисленных выше, важны, вам следует либо начать отслеживать эти файлы с помощью git add <file> либо добавить их в свой .gitignore .

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

Команда распечатает все успешно удаленные файлы и каталоги:

Параметр -d указывает git удалять и неотслеживаемые каталоги. Если вы не хотите удалять пустые неотслеживаемые каталоги, опустите параметр -d .

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

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

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

Выберите один из вариантов и нажмите Enter .

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

Удаление игнорируемых файлов

Команда git clean также позволяет удалять игнорируемые файлы и каталоги.

Чтобы удалить все игнорируемые и неотслеживаемые файлы, используйте параметр -x :

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

Приведенная выше команда удалит все файлы и каталоги, перечисленные в вашем .gitignore и сохранит неотслеживаемые файлы.

Выводы

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *