Как полностью удалить файл из репозитория git?
Недавно я заметил, что файлы проектов, которые используют мои текстовые редакторы (вместе с некоторыми другими нежелательными файлами), добавили репозиторий git для проекта. Поскольку они фактически не являются частью проекта, я бы хотел их удалить, но git rm
не удаляет старые версии из репозитория, и я не мог найти ничего другого, что выглядит многообещающим.
Ответы
Ответ 1
Инструмент, который вы хотите, это git filter-branch
. Его использование описано здесь, но в основном:
$ git filter-branch --tree-filter 'rm -f my_file' HEAD
удалит "my_file" из каждого коммита.
Обратите внимание, что при этом происходит перезапись каждого коммита, поэтому, если вы отправляете в удаленный репозиторий, вы должны (а) принудительно обновить и (б) все остальные, кто извлекал у вас данные, теперь будут иметь дублированные коммиты (поскольку вы переписали историю), так как описано на странице руководства git rebase
.
Ответ 2
Это то, за что git filter-branch
, но будьте осторожны, что ваша история репо изменится, и хеши фиксации будут отличаться после перезаписи истории.
Если вы также хотите освободить место, я рекомендую вам использовать git forget-blob
, потому что git filter-branch
сам по себе не сделает git забыть ваш файл, так как он все еще может ссылаться на пульты, рефлоги, теги и т.д..
git forget-blob main.c.swp
Вы можете получить дополнительную информацию здесь