The most obvious reason not involving automated systems is to create a repo’s initial ref. This can be useful on teams who are super strict about review process and git history.
Once you account for automated systems, many other reasons can arise. Not just the “trigger CI” case mentioned in another comment, triggering builds or processes based on remote content the code accesses, or generating something either random or seeded by the commit hash/timestamp/message/etc.
It can even be a Homer Simpson-style drinking bird button press, so finished software doesn’t get mistaken for abandoned.
Probably whole worlds of things I haven’t imagined because I don’t use git hooks or submodules.