Как удалить неотслеживаемые локальные файлы из текущего рабочего дерева?
Примечание: если вы хотите удалить только неотслеживаемые файлы немного, но не все они, git clean
теперь имеет режим интерактивный! См. мой ответ на этот другой вопрос: git 1.8.4+
Обратите внимание, что вы не удаляете файлы из ветки git, поскольку ветка является ссылкой на фиксацию и, следовательно, не содержит неотслеживаемых файлов. Они присутствуют только в рабочем каталоге и не имеют ничего общего с ветвями. Наверное, это просто уточнение терминологии.
Прежде чем опубликовать новый ответ, подумайте, что на этот вопрос уже есть более 25 ответов. Убедитесь, что ваш ответ соответствует тому, чего нет среди существующих ответов.
Чтобы прояснить понимание непосвященных и новичков в Git - запустите git status, и если он показывает файл как неотслеживаемый, и вы не хотите, чтобы этот файл в репо, вы можете просто перейти в свою файловую систему и удалить или переместить его. . Это не повредит вашему локальному репо или Git. Вы также можете использовать git clean
или некоторые его варианты в ответах ниже, включая интерактивную версию для удаления только выборочных файлов, но интерактивный режим может быть утомительным. Что бы вы ни делали, убедитесь, что вы понимаете, что удалит git clean
, или используйте --dry-run
, чтобы он сообщал вам, ничего не удаляя.
Если файлы еще не отслеживаются, не могли бы вы просто удалить их без git? rm files-to-be-deleted
Я бы спрятал его на случай, если вам понадобится снова их использовать и очистить, используйте git clean: more deatils: git-scm.com/docs/git-clean
@ User1291 вы потеряете все свои локальные ветки и тайники, если будете клонировать заново в другом каталоге.
мерзкий - это то, что вы ищете. Он используется для удаления неотслеживаемых файлов из рабочего дерева.
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
работает только в каталоге, в котором он вызван (и подкаталогах). Если вы хотите очистить всю рабочую копию, вы должны вызвать ее в ее корневом каталоге.
Как мне включить игнорируемые каталоги / файлы?
Он также удаляет все файлы внутри .gitignore. Мне нужно удалить только новые файлы / папки, а не в .gitignore
@Kostanos Если вы не хотите удалять файлы в .gitignore, не указывайте флаг -x.
Обратите внимание, что флаги -x или -X удаляют файлы, игнорируемые .gitignore, но не те, которые игнорируются update-index --assume-unchanged
.
Извините, если я чего-то упускаю, но отличается ли git clean -f
от простого удаления файла?
git clean -f :/
работает так, как если бы вы запустили его в корневом каталоге репозитория. См. Также более поздние ответы, также учитывающие подмодули с git clean -ffxd :/
Количество голосов говорит о том, насколько важно иметь более интуитивную команду. Что-то вроде git remove untracked
или git remove_untracked
@Michelle git clean -xfd также УДАЛЯЕТ ВСЕ ФАЙЛЫ, В настоящее время ИГНОРИРОВАННЫЕ В ВАШЕМ .gitignore, и они не подлежат восстановлению.
@Michelle: Приятно написать, что на самом деле он делает: он удаляет все файлы, которые были в списке gitignore, и я узнал об этом после неудачного опыта.
@ maan81, ты прав. git clean -f
ничем не отличается от простого удаления файла. Но это не делает его бесполезным, как я, возможно, ошибочно, вы подразумеваете. Когда у вас много артефактов сборки, то есть сотни файлов в десятках каталогов, «просто удалить» их может оказаться не так уж и «просто». Вам придется написать сценарий. Это то, что делает для вас git clean -f
, поскольку он точно знает, какие файлы относятся к репо, а какие нет.
Use -f option twice if you really want to remove such a directory.
вот что я искал! Благодарность!
После борьбы и проклятий в течение 45 минут я нашел комментарий @ EduardoBezerra ... Я думаю, OP должен отредактировать свой ответ, чтобы подчеркнуть поведение git clean - удаление только материалов в каталоге, в котором вы находитесь, и его подкаталогах. Это неясно из git help или из самого ответа.
используйте -i, чтобы сделать его интерактивным
git clean -fd
был волшебной частью вашего ответа, мне нужно было удалить все неотслеживаемые файлы из каталогов и!
Обратите внимание, что git clean работает на уровне каталогов, а не на уровне репо. Поэтому, если вы запустите git clean
внутри каталога в репо, он будет очищать только рекурсивно в каталоге.
Используйте git clean -f -d
, чтобы убедиться, что каталоги также удалены.
На самом деле ничего не удаляйте, просто покажите, что будет сделано.
git clean -n
или же
git clean --dry-run
Удалите неотслеживаемые каталоги в дополнение к неотслеживаемым файлам. Если неотслеживаемый каталог управляется другим репозиторием Git, он не удаляется по умолчанию. Дважды используйте параметр -f
, если вы действительно хотите удалить такой каталог.
git clean -fd
Затем вы можете проверить, действительно ли ваши файлы исчезли с git status
.
Как указывалось ранее, его можно испытать всухую с git clean -n -d
.
То же самое делать с git clean -nd
и git clean -fd
.
Если неотслеживаемый каталог является собственным репозиторием git (например, подмодулем), вам нужно использовать -f
дважды:
git clean -d -f -f
Кстати, это написано в документация: Git откажется удалять каталоги с подкаталогом или файлом .git, если не указан второй -f. Но все равно спасибо!
Спасибо огромное. Это сводило меня с ума.
Если необходимо удалить неотслеживаемые файлы из определенного подкаталога,
git clean -f {dir_path}
И комбинированный способ удаления неотслеживаемых директорий / файлов и проигнорированных файлов.
git clean -fxd {dir_path}
после этого вы будете изменять файлы только в git status
.
Вот что я всегда использую:
git clean -fdx
Для очень большого проекта вы можете запустить его несколько раз.
@Martin Одному из проектов, над которым я работаю, 8 лет, и более 80 разработчиков активно пишут код. Git иногда не может очистить его с первого прохода.
Я могу подтвердить это, так что это все еще актуально в 2020 году. Мы также работаем над большим проектом, и мне пришлось запускать его 4-5 раз, пока GIT не нашел больше файлов для удаления.
Я удивлен, что об этом раньше никто не упоминал:
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
Мне это нравится - мне удобнее иметь его в моей истории bash, чем любой из других вариантов, потому что это не проблема, если я случайно выберу его ctrl-r или ctrl-p.
Может быть, git clean -i
работает только при вызове из корня рабочей копии?
Мне нравится 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 и тоже не нашел.
-u
эквивалентен --include-untracked
. Вы можете найти помощь по git help stash
.
@hiroshi Спасибо! после того, как попробовали все решения дюжины разных людей, это то, что наконец сработало ... уф! Даже git stash не подействовал. Сохранение - u позаботилось о неотслеживаемых. сбросить Hard / Clean Force / и т. д. ничего из этого не помогло мне.
Опция save
устарела в пользу push
, который делает то же самое, но больше. Вы можете прочитать больше здесь, https://stackoverflow.com/questions/44680028/whats-the-diffe rence-between-git-st ash-save-and-git-sta sh-push / 44681952
git clean -fd
удаляет каталог
git clean -fX
удаляет игнорируемые файлы
git clean -fx
удаляет игнорируемые и не проигнорированные файлы
можно использовать все вышеперечисленные параметры в комбинации как
git clean -fdXx
проверьте руководство по git для получения дополнительной помощи
Команда git clean -fdXx
выдает сообщение об ошибке "фатальный: -x и -X не могут использоваться вместе" (с использованием git-2.8). В качестве последнего предложения в ответе укажите ссылку на руководство по git. Ваше здоровье
последовательно выполните две команды: git clean -fdX, git clean -fdx
Лучше использовать: 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}: / так будет, как если бы вы выполнили команду в корне репо
Чтобы узнать, что будет удалено перед фактическим удалением:
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~
еще более быстрый способ - git add . && git reset --hard HEAD
git add . && git reset --hard
Это может быть не то, что вам нужно, если есть изменения, которые вы хотите зафиксировать.
@AlexanderMills git reset --hard
сбрасывает все незафиксированные изменения, НО НЕ ОТСЛЕЖИВАЕМЫЕ ФАЙЛЫ, в состояние последней фиксации. Вот почему нам сначала нужен git add .
- который обрабатывает все неотслеживаемые файлы (поэтому они тоже сбрасываются)
Если вы просто хотите удалить файлы, которые не отслеживаются git status
git stash save -u
git stash drop "stash@{0}"
Я предпочитаю git clean, потому что git clean удалит файлы. игнорируется git, поэтому ваша следующая сборка должна будет все перестроить и вы также можете потерять настройки IDE.
Это также удалит действительные изменения в отслеживаемых файлах. Я бы не рекомендовал это.
Да, сначала вы захотите зафиксировать изменения в отслеживаемых файлах.
Чтобы удалить все неотслеживаемые файлы, простой путь к сначала добавь их все и сбросить репо, как показано ниже
git add --all
git reset --hard HEAD
Вы можете заменить git add --all
на git add .
. Таким образом, вы можете сделать это более коротким способом в онлайн-версии git add . && git reset --hard HEAD
(будьте осторожны с очень с этой командой).
Зачем использовать это вместо git clean
?
Потому что git clean
, по-видимому, также удаляет все, что игнорируется. Он просто удалил мою папку node_modules
. Это сначала обработает все файлы, кроме игнорируемых, а затем удалит их, выполнив сброс. Игнорируемые файлы не будут затронуты.
@Andreas он не удаляет игнорируемые файлы для меня (git 2.14.1). Вы должны запустить git clean -n
в любом случае перед выполнением настоящего удаления (или используйте git clean -i
).
@ Qw3ry git version 2.10.2.windows.1
, странно.
git clean
удаляет игнорируемые файлы, только если вы используете параметр -x
или -X
, в противном случае он просто удаляет неотслеживаемые файлы.
@ user2864740 Если я правильно понимаю, эта опция не только удалит неотслеживаемые файлы, но и пользователи потеряют все изменения, которые они внесли в отслеживаемые файлы. Для тех, кто использует worked
, они могут попытаться сбросить эти изменения, помимо удаления неотслеживаемых файлов, хотя здесь вопрос не в этом.
@RousseauAlexandre git add .
рекламирует только из текущего каталога и ниже, тогда как git add --all
применяется к репо. Последний вариант кажется более безопасным.
Вы должны зафиксировать любые изменения, которые хотите сохранить, перед запуском, поскольку он удалит их.
Замечательно ... Я уже запускал решение для своего коммита из stackoverflow.com/questions/927358/…, и это все, что мне было нужно.
Обязательно ли здесь указывать HEAD? Я пробовал без, и это сработало.
Для меня работали только следующие:
git clean -ffdx
Во всех остальных случаях я получал сообщение "Каталог пропуска" для некоторых подкаталогов.
Спасибо. Я не стал использовать -x
и просто использовал git clean -ffd
, чтобы не стирать файлы в .gitignore.
Обычная команда 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
интерактивный режим, и он сообщит вам, что будет удалено, и вы сможете выбрать действие из списка.
Чтобы очистить только файлы [Папки не будут перечислены и не будут очищены]:
$ git clean -i
Чтобы очистить файлы и папки:
$ 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
с очисткой папки или как-то путают это!
Что с этим изображением?
использовать git reset HEAD <file>
для деактивации файла
Чем это хоть как-то полезно? Он не удаляет файлы и ничего не делает с файлом, который не был зарегистрирован в репо.
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
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)
конечно, это следует использовать с большой осторожностью
Всегда используйте-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
о-о-о-о с 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
. Я отредактировал свой ответ, чтобы отразить это.
Мы можем легко удалить локальные неотслеживаемые файлы из текущего рабочего дерева git, используя приведенные ниже комментарии git.
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
Пример:
git reset --hard HEAD
Ссылки:
Это также удалит изменения, подготовленные для фиксации, а не только неотслеживаемые файлы, что может быть не тем, что вам нужно.
Не работает: оставляет несколько файлов. git clean -ffdx
- это решение
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:
Все файлы и папки удалены из репозитория.
Давайте восстановим их на localhost, если они вам понадобятся:
Вы сделали!
Мне нравится использовать команду git stash
, позже вы можете получить спрятанные файлы и изменения.
git clean
- тоже хороший вариант, но полностью зависит от ваших требований.
вот объяснение git stash и git clean, 7.3 Инструменты Git - Хранение и очистка
Если ничего не помогает, просто удалить все изменения, перечисленные командой "git status", можно использовать следующую комбинацию:
git add -A && git commit -m temp && git reset --hard HEAD^
Сначала будут выполнены все ваши изменения, затем будет создана временная фиксация, а затем она будет отменена.
Я использую это:
git status
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
Эта интерактивная шпаргалка по git ndpsoftware.com/git-cheatsheet.html показывает рабочую область git (Google дает лучшие результаты с "рабочей областью", чем с "рабочей копией").