Mind those p's and q's. Ever try to guess what caused a problem only to discover it's something you inadvertently did? Of course, it happens to everyone. That's why keeping track of the hundreds of changes that occur to your codebase every day is so critical.
Version control systems are explicitly designed to keep track of these changes—helping you to track down what went wrong and why.
Version control systems come in two flavors: centralized and distributed. The centralized approach has a long history with CVS being the old mainstay, and Subversion being its modern replacement. Both are still in heavy used.
The distributed approach is the newer model, where branch copies of the codebase are created at multiple working destinations simultaneously and changes are merged without control of a "master" copy. Distributed version control has gained popularity in recent years and several contenders are vying for the hearts of developers: git, with it's claim to fame being speed; Mercurial, with its intuitive interface; and Bazaar with its simplified command set.