commit-patch allows the user to control exactly what gets committed to a version control system by letting the user supply a patch to be committed rather than using the files in the current working directory. This allows for more finely grained commits. It supports Darcs, Git, Mercurial, Bazaar, Subversion, and CVS.