Git is a great tool. Hands down, it is the best VCS on the market (well, if free and open source count as “on the market”). One of the features I really like about Git is the ability to stage and unstage files for a commit. This helps you keep your commits logically cohesive without trying to force yourself to only work on one task at a time; you can work on a few different tasks, and then put your changes into different commits by staging them appropriately.
Until recently, I thought I could only stage and commit whole files. But NO!!! You can stage and commit a portion of the changes in a file using Interactive Staging. Handy my friends!