To complete some of the previous answers:
A commit will end the current transaction in the current section. It will guarantee the consistency of the data that was "touched" during the transaction.
A checkpoint writes all commited changes to disk up to some SCN that willl be kept in the control file and datafile headers. It guarantees the consistency of the database.
EDIT 1
As some of the comments point out that the concepts aren't completely clear I will provide some more information here.
We have 3 major structures involved in the commit and checkpoint concepts.
- Memory (Database Buffer Cache & Redo Log Buffer)
- Redo Logs (Redo log files)
- Database (Datafiles)
So changes are made to blocks kept in the Database Buffer Cache (DBCache). Once commited, the changes are pushed to the Redo Log Buffer (RLB) which is dumped on a regular basis to the Redo Log Files (RLF) and, eventually to the database storage files (DF).
Also on a regular basis and not completely unrelated to commit, the checkpoint process dumps the dirty blocks from the DBCache to permanent storage DF. During the checkpoint process the SCN associated with the latest DB block written to storage is written on the DF headers and the control file. That will be from that moment on the latest consistent estate of the database.