У розділі 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