Ответ 1
filter-branch также сохраняет резервные копии в .git/refs/original, которые вам также нужно удалить перед gc'ing
Я использую
git filter-branch --subdirectory-filter dir/name -- --all
чтобы создать репо, имеющее только историю, относящуюся к этому dir/name. Прежде чем я сделаю фильтр, я клонирую оригинальное репо (которое намного больше) в директорию tmp. После ветвления фильтра репо выглядит так, как я этого хочу, за одним исключением: он все еще содержит все объекты из исходного репо, хотя они не показаны в "git log."
Как я могу полностью удалить все эти нежелательные объекты?
Я пробовал такие вещи, как:
git reflog expire --expire=now --all
git gc --aggressive --prune=now
Мне ясно, что я не знаю, почему они все еще существуют или что значит их удалить, но я бы точно хотел. Немного возможно связанная с этим информация, которая работает против меня, заключается в том, что я сделал репарацию git -a на моем исходном репо некоторое время назад и, похоже, скопировал этот пакетный файл в новое репо. Похоже, я все равно могу делать то, что хочу.
filter-branch также сохраняет резервные копии в .git/refs/original, которые вам также нужно удалить перед gc'ing