В главе 9 книги Pro Git есть раздел о Удаление объектов .
Позвольте мне кратко изложить здесь следующие шаги:
git filter-branch --index-filter \
'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \
--tag-name-filter cat -- --all
Как и ранее описанная опция перезагрузки, filter-branch
выполняет операцию перезаписи. Если вы опубликовали историю, вам нужно будет --force
нажать новые ссылки.
Подход filter-branch
значительно более мощный, чем подход rebase
, поскольку он
filter-branch
также сохраняют резервные копии, поэтому размер репо не будет уменьшаться немедленно, если вы не закончите блокировку и вывоз мусора собирать:
rm -Rf .git/refs/original # careful
git gc --aggressive --prune=now # danger