git is my favorite VCS, and with good reason. It's extremely popular, is cross platform (for when I have to develop on Windows), has a lot of graphical clients to choose from, and perhaps most importantly, is a joy to use on the command line.
There are a lot of features that make git great, but some of my favorites are the incredibly powerful things you can do. Let's say you are working on a team, and one of your friends has a useful patch that will help you out, but it's not ready to be committed yet. Your friend runs the following on their machine:
$ git diff master..really-great-feature > feature.diff
And then sends you
feature.diff. You want to use the code in your local working branch, but you don't want to mix your work in with theirs. What you can do is apply the patch on your working branch:
$ git checkout my-feature $ git apply feature.diff
Then, when you're done and ready to commit just your work, git has a built in way to reverse the changes the patch made, with the same patch. Just run
git apply with the
$ git apply --reverse feature.diff
Then you're ready to commit!