Git itself requires you be able to think of it as both models, diffs and snapshots. For example most uses of `git rebase` are clearer if your mental model while doing so are of diffs.
That only one is how it's implemented is besides the point really, until you get _quite_ low level.