My workflow usually involves me making multiple changes to a file, each of which belongs to it's own conceptual unit of change across the project (= commit).
What I would like to be able to do is to add certain diffs (either a whole file, or only certain lines of a file) to a pending commit (which would probably have to be named) and to have multiple pending commits 'active' at the same time.
Then when all changes related to a particular pending commit are complete across all files, I can commit the named commit!
Any ideas of which VCS would be a good candidate for this?
In svn, you can define changelists and then commit only the files in a particular changelist.
Git goes a bit further, and allows you to record patches by interactively selecting changed chunks from a file with git add -p.
Though popular, these features are contrary to best practices. You cannot test your changes properly in this way. Everything may work in your working copy, yet a commit of only part of the changes may break the build. Using feature branches is much safer, and any modern version control system supports this.
There are also the Mercurial ShelveExtension and git-stash, which allow you to shelve selected changes at the granularity of patch hunks for later commits. This way of working does allow you to test properly before committing.