# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
( Убедитесь , что для совершения первого изменения , которые вы хотите сохранить , чтобы избежать любых инцидентов , как jball037 комментариев ниже . Вариант будет держать ваши файлы нетронутым на жестком диске , хотя.) --cached
Я обнаружил, что шаг git add не нужен, когда я запускаю git status после git rm --cached, удаленные файлы уже находятся в промежуточной области, и вы можете просто продолжить и зафиксировать их.
@VonC извините, это не предназначалось для того, чтобы быть рутом или палкой :) Но да, я использовал --cached, и все мои незафиксированные изменения были потеряны, когда я проверял свои файлы. Паниковал на мгновение, но «git reset HEAD» восстановил мои файлы (но на этот раз без файлов, которые я указал в .gitignore, так что ваше решение все еще работало!)
jball037
3
@ jball037 Хорошо. Я добавил предупреждение и отредактировал ответ соответственно.
VonC
1
если только я прочитал еще одну строку, прежде чем делать это "(убедитесь, что сначала зафиксировали ваши изменения, которые вы хотите сохранить, чтобы избежать любого инцидента как jball037" #fml
Эйден Стридом
9
Я могу неправильно понять, но вы пытаетесь удалить файлы, которые недавно игнорировались, или вы хотите игнорировать новые модификации этих файлов? В этом случае вещь работает.
Если вы хотите удалить проигнорированные файлы, ранее зафиксированные, используйте
Это очень просто, зачем удалять файлы после того, как я обновляю свой .gitignore Однако для этого требуется пара незначительных обновлений: `` git rm –cached git ls-files -i –exclude-standard git commit -m ' cleanup ``
Аарон
1
Я знаю, что это старый вопрос, но решение gracchus не работает, если имена файлов содержат пробелы. Решение VonC для имен файлов с пробелами состоит в том, чтобы не удалять их используя --ignore-unmatch, а затем удалять их вручную, но это не будет работать хорошо, если их много.
Вот решение, которое использует массивы bash для захвата всех файлов.
Ответы:
Решение, упомянутое в « .gitignore file not ignoring », немного экстремально, но должно работать:
( Убедитесь , что для совершения первого изменения , которые вы хотите сохранить , чтобы избежать любых инцидентов , как jball037 комментариев ниже . Вариант будет держать ваши файлы нетронутым на жестком диске , хотя.)
--cached
У вас также есть другое, более детальное решение в посте блога « Заставить Git игнорировать уже отслеженные файлы »:
Бассим предлагает в своей редакции :
Файлы с пробелами в путях
источник
Я могу неправильно понять, но вы пытаетесь удалить файлы, которые недавно игнорировались, или вы хотите игнорировать новые модификации этих файлов? В этом случае вещь работает.
Если вы хотите удалить проигнорированные файлы, ранее зафиксированные, используйте
источник
git ls-files -i –exclude-standard
git commit -m ' cleanup ``Я знаю, что это старый вопрос, но решение gracchus не работает, если имена файлов содержат пробелы. Решение VonC для имен файлов с пробелами состоит в том, чтобы не удалять их используя
--ignore-unmatch
, а затем удалять их вручную, но это не будет работать хорошо, если их много.Вот решение, которое использует массивы bash для захвата всех файлов.
источник