git по-прежнему показывает файлы как измененные после добавления в .gitignore

252

я добавляю это в файл .gitignore

.idea/*

но в любом случае статус:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

Что я делаю не так ? я даже добавил .idea / * к глобальному ~ / .gitignore_global, но git status, в любом случае, показывает мне:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml
Саид Калдыбаев
источник

Ответы:

422

Ваш .gitignoreработает, но он все еще отслеживает файлы, потому что они уже были в индексе.

Чтобы остановить это, вы должны сделать: git rm -r --cached .idea/

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

PS: Вы можете использовать .idea/вместо того, .idea/*чтобы игнорировать каталог. Вы можете найти более подробную информацию о закономерностях на на .gitignore странице человека .


Полезная цитата из git-rmсправочной страницы

--cached
    Use this option to unstage and remove paths only from the index. 
    Working tree files, whether modified or not, will be left alone.
MCLS
источник
Не могли бы вы объяснить, что вы подразумевали под «Просто добавление .idea / тоже сработало бы». Это альтернативное решение для использования, .gitignoreа затем делать git rm -cached?
Мехрад
3
@ Mehrad не нужно * в .gitignore
Стив
2
Нет, просто добавление .idea / не работает, потому что, как вы сказали в ответе, оно уже есть в индексе.
Энрике де Соуза
15
То есть вы говорите, что вам нужно commitпосле удаления кэшированных файлов? Это действительно кажется нелогичным; это файлы, которые я НЕ хочу фиксировать. И я не хочу, чтобы они были удалены из хранилища (я просто хочу, чтобы они больше не болтались вокруг моего git status). Или я просто очень запутался?
Скотт Биггс
6
Его файлы уже отслеживались git из-за более ранней фиксации, поэтому для их удаления необходимо создать новую фиксацию, которая удалит их из хранилища.
MCLS
47

Для людей, которые все еще ищут эту проблему, смотрят только на этой странице.

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

1. git rm -r --cached .  
2. git add .
3. git commit -m 'Removing ignored files'

Вот немного больше информации.

  1. Эта команда удалит все кэшированные файлы из индекса.
  2. Эта команда добавит все файлы, кроме тех, которые упомянуты в gitignore.
  3. Эта команда снова зафиксирует ваши файлы и удалит файлы, которые вы хотите игнорировать, но сохраните их в локальном каталоге.
Sidhanshu_
источник
1
Это было полезно для меня, я просто хотел бы отметить, что в Windows cmd одинарные кавычки не работают в # 3. Использование git commit -am "Удаление игнорируемых файлов" Работает, хотя.
Sundance.101
1
Не беспокойтесь, и еще раз спасибо за четкий и краткий ответ.
Sundance.101
1
Это решение действительно портит мои файлы проекта. Я должен был все вернуть после этого.
Фатмайк
1

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

Я случайно кэшировал некоторые каталоги документов с несколькими сотнями файлов при работе с git в IntelliJ IDEA в Windows 10, и после добавления их .gitignore(и НЕВЕРНО перемещая их немного) я не смог удалить их из списка изменений по умолчанию.

Сначала я зафиксировал фактические изменения, которые я сделал, а затем решил эту проблему - это заняло у меня слишком много времени. Я пытался, git rm -r --cached .но всегда получал path-specОШИБКИ, с различными вариациями, path-specа также с -fи-r флагами.

git statusбудет по-прежнему показывать имена файлов, поэтому я попытался использовать некоторые из них дословно git rm -cached, но не повезло. Кажется, сработали и распаковали изменения, но через какое-то время они снова встали в очередь (на точных сроках я не уверен). Я наконец удалил эти записи для хорошего использования

git reset

Я предполагаю, что это ХОРОШАЯ ИДЕЯ, когда у вас нет инсценированных / кэшированных изменений, которые вы действительно хотите зафиксировать.

килотонна
источник
0

Просто добавь git rm -r --cached <folder_name/file_name>

Иногда вы обновляете файл .gitignore после команды commit файлов. Таким образом, файлы кэшируются в памяти. Чтобы удалить кэшированные файлы, используйте приведенную выше команду.

Абхилаш Рамтеке
источник
-2
  1. Git добавить.

  2. Git status // Проверить файл, который изменяется

    // git reset HEAD --- заменить файл, который вы хотите игнорировать

  3. git reset HEAD .idea / <- Те, кто хотел исключить .idea из перед коммитом // git, проверяют состояние и файл идеи исчезнет, ​​и вы готовы к работе!

  4. git commit -m ''

  5. мерзавец

Лим Кин Панг
источник
Это было бы предположением, что OP хочет сбросить.
Советская граница