The short version is that git doesn't optimize at that level, at the current scale your project is at.
As you make more and more commits and your repo gets larger, at some point git will switch to "packed" format in .git/objects, and packed format has some provisions for storing essentially diffs of files rather than storing a complete copy of the file.
But for now, git is just using individual blob files under .git/objects. Each blob contains the contents of one of your working tree files at the time you did git add, in zlib compressed format.
The way git stores things is still pretty space-efficient, even with one blob file for each version of a file. Commits share blob files, so if you make a change to one file and make a new commit, that new commit will have a tree structure that represents your working tree at the time of the commit, and that new commit's tree structure will share all but one blob file -- the one you changed -- with its parent commit. In addition, the two commits share most of the git tree objects (which git uses to represent directory listings) between them.
For more info about the packed format, check out:
https://git-scm.com/docs/pack-format
I found this blog post interesting and readable:
https://github.blog/open-source/git/gits-database-internals-i-packed-object-store/