There are limits, but I prefer small, atomic commits.
First, it makes things easier when you're referring to why a change was made. Second, it drastically reduces the cost of making a mistake.
Two notes of caution though:
If you're using a centralised VCS, only commit when the code builds and tests run. (If you're using DVCS, replace "commit" with "push".)
Do not implicitly refer to one commit comment from another.
351: pdr: Stop foo from grommiting.
352: pdr: Ooops, got that wrong, let's try again.
353: dan: New launch page.
354: pdr: Third time lucky.
That sort of thing. Don't do it. It's very tempting when you're committing often, because you remember the commit you did five minutes ago, and commenting starts to feel like a conversation with yourself. But control yourself. It makes no sense to the poor person, two years into your future, who does a search for the last commit on given files.