One feature that I enjoy is that after I realize that I have changed several files without a checkin, it is easy for me to break up the changes into logical groups, and check them in separately. I am not forced to check in all of the changes together. Git does this using a two-step process for checkin. Each changed file must be "staged" before it can be checked in. You do not have to stage every changed file for a given checkin, giving you control over what goes into the checkin. In fact, you can even stage individual lines in a file, allowing you to split the changes in a file over multiple checkins.