On the top of my head:
- its distributed aspect (each developer has a copy of the repository)
- The ability to handle complex merges very quickly
- the possibility to switch from task to task, shelve his work, go back to it…
- cheap branching (instant switch: it just writes a few bits in a file! And it does not consider a branch as a directory like SVN does)
The main difficulty is to establish a workflow between the different repos, without breaking the history of what has already been published (pushed to a public repo).
(source: infoq.com)
The rebase in particular can be difficult to use correctly at first, since it does rewrite the history of a branch, and that changes the SHA1 which is associated with it: to a public branch, that means lots of merges from the other developers pulling from it.