]> Sergey Matveev's repositories - stargrave-blog.git/commit
git reflog это тоже полноценные ссылки на объекты
authorSergey Matveev <stargrave@stargrave.org>
Wed, 22 Nov 2023 17:32:33 +0000 (20:32 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 22 Nov 2023 17:32:33 +0000 (20:32 +0300)
commitb86432a85a70171c5e3cab83ef233d1d054b17b5
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parentf428605a1db0d71a25f656a607d1d4a6263820fd
git reflog это тоже полноценные ссылки на объекты

Делал тут rebase одного репозитория, схлопывая кучу коммитов в один. При
этом были удаления огромных файлов. git log --stat показывает что кода
осталось с гулькин нос во всей истории, но .git директория занимает
полсотни мегабайт. git gc --aggressive --prune=now всё равно не очищает
то, на что ничего не ссылается (как мне казалось). Никаких веток, тэгов,
remote-ов -- ничего нет лишнего. git fsck --full --unreachable
--dangling тоже ничего не показывают.

Только после всего этого глаз зацепился за наличие reflog-а, который и
после кучи rebase-ов содержал тьму ссылок. Я почему-то думал, что он
именно как log себя ведёт -- в любой момент объекты на которые он
ссылается могут пропасть. Но только после его подчистки (git reflog
expire --all --expire=now), git gc всё схлопнул до 85 килобайт.