Удалить существующий файл из репозитория Git

126

Я хочу, чтобы git перестал отслеживать мой локальный журнал разработки (log / development.log) в наших репозиториях. Возможно ли это и как это сделать?

Splashlin
источник

Ответы:

143

Просто чтобы сразу дать полный ответ:

  1. от klemens: вам нужно добавить файл в свой .gitignoreфайл где-нибудь над нежелательным файлом в репо. т.е.

    $ cd $ cat >> .gitignore development.log CD

  2. от м. narebski: Затем вам нужно удалить файл из репозитория, выполнив « git rm --cached <file>и затем зафиксировав это удаление»

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

С учетом этого предостережения, инструмент, который вы ищете, если это ваша цель filter-branch. Первый пример делает именно то, что я описываю.

Тим Вишер
источник
3
использование git rm --cached, похоже, не только удалило мою ветку, но и когда я перешел в другую систему, он физически удаляет файлы в этой системе. Есть идеи, что там происходит?
biagidp
2
В ответ на вышесказанное: я считаю, что проблема заключалась в том, что у меня не было .gitignore в альтернативной системе до извлечения изменений, поэтому удаление удалило локальную копию. По крайней мере, это теория
biagidp
53

Чтобы остановить отслеживание файла, просто используйте git rm --cached <filename>.

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

kusma
источник
1

добавьте файл gitignore.

см. http://git-scm.com/docs/gitignore

fetzig
источник
13
Это только половина ответа. .gitignoreзаписи не применяются к файлам, которые уже отслеживаются.
CB Bailey
10
Вторая часть - это git rm --cached <file>и потом это удаление.
Якуб Наребски 08
1
Почему для git нет простой команды для повторной оценки всех отслеживаемых файлов в соответствии с текущим файлом .gitignore? ... или это слишком много здравого смысла? : p
Александр - Восстановить Монику