I think the staging area is a horrible idea. It greatly complicates the UI ("diff --cached"? Really?) without providing many benefits (if you want to commit just some files, you could simply specify the names at commit time.
I really love bzr's UI in this respect, and I understand Mercurial is similar too.
I really love bzr's UI in this respect, and I understand Mercurial is similar too.