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


126

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


Ответы:


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 может предотвратить случайное добавление его позже.


1

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

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


13
Это только половина ответа. .gitignoreзаписи не применяются к файлам, которые уже отслеживаются.
CB Bailey

10
Вторая часть - это git rm --cached <file>и потом это удаление.
Якуб Наребски 08

1
Почему для git нет простой команды для повторной оценки всех отслеживаемых файлов в соответствии с текущим файлом .gitignore? ... или это слишком много здравого смысла? : p
Александр - Восстановить Монику
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.