Git stores files as blobs, directories as trees, and commits as snapshots of trees with metadata. Blobs contain file contents hashed into unique identifiers. Trees list blobs and subdirectories. Commits point to a tree, author, committer, and optionally previous commits. Tags provide permanent names for specific commits. References like branches are pointers to commits that can easily be moved.