1. git хранит всю историю. Но встроенный garbage collector может удалять коммиты, которые не привязаны ни к какой ветке. Поэтому для начала:
* Удалите ненужные бренчи.
* Выполнте "git gc --aggressive --prune" после удаления бренчей.
2. Затем нужно разобраться с тем, что у вас занимает место. Если вы напихали крупных файлов в ваш гит репо и они присутствуют в активном бренче, то никак их не удалить. Точнее можно попробовать удалить сами файлы вручную или при помощи bfg-repo-cleaner, но при этом надо синхронизировать это со всеми участниками. Если у вас гит репо локальный и никто им не пользуется, это проще. Но при этом вы ломаете коммиты - откатиться на них уже будет нельзя.
3. Наконец следует потратить вечерок и почитать про git-flow, или даже посмотреть 3-4 ютуб ролика от разных авторов которые показывают разные флоу работы с гитом. Там вы поймете почему и зачем люди пользуются rebase, squash, зачем удаляют ненужные ветки и содержат dev/master в хорошем состоянии, когда там нет промежуточных коммитов с commit message типа "апечатка" "забыл" "еще" и подобного мусора. И гит репо занимает минимальный объем.