Как я могу полностью удалить файл из репозитория git? - PullRequest
70 голосов
/ 11 августа 2010

Недавно я заметил, что к файлам проекта, которые используют мои текстовые редакторы (вместе с каким-то другим мусором), добавлен репозиторий git для проекта. Поскольку они на самом деле не являются частью проекта, я бы хотел их удалить, но git rm не удаляет старые версии из хранилища, и я не смог найти ничего более перспективного.

Ответы [ 2 ]

128 голосов
/ 11 августа 2010

Инструмент, который вам нужен - git filter-branch. Его использование описано здесь , но в основном:

$ git filter-branch --tree-filter 'rm -f my_file' HEAD

удалит «my_file» из каждый коммит.

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

10 голосов
/ 30 января 2017

Это то, для чего git filter-branch, но имейте в виду, что ваша история репо изменится, и после перезаписи истории хэши фиксации будут другими.

Если вы также хотите освободить место, я рекомендуювы используете git forget-blob, потому что только git filter-branch не заставит git забыть ваш файл, так как на него все еще могут ссылаться удаленные пользователи, reflog, теги и т. д.

git forget-blob main.c.swp

Youможно получить больше информации здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...