Git is a distributed revision control and source code management system that emphasizes speed, data integrity, and support for distributed, non-linear workflows.
Git supports rapid branching and merging, and includes specific tools for visualizing and navigating a non-linear development history. Git makes the core assumption that a change will be merged more often than it is written as it is passed around various reviewers. Branches in Git are very lightweight. It is only a reference to a single commit; with its parental commits, the full branch structure can be constructed.
What are its differences from other version control services (VCS)?
The major difference between Git and other VCSs, including Subversion, is how Git processes data. Conceptually, most other systems store information as a list of file-based changes. These systems CVS, Subversion, Perforce, Bazaar, and others retrieve the information they store as a set of files and the changes made to each file over time, as illustrated below.
Other systems tend to store data as changes to a base version of each file. Git does not classify or store its data using this method. Instead, Git classifies its data like a set of snapshots of a mini file system. Every time you commit, or save the state of your project in Git, basically it takes a picture of what all your files look like at that moment and stores a reference to that snapshot.
If files have not changed, Git does not store the file again, just a link to the previous identical file it has already stored.
Git stores data as snapshots of the project over time. This is an important distinction between Git and all other VCSs. This difference makes Git reconsider almost every aspect of version control that most other systems copied from the previous generation. Git operates more like a mini file system with powerful tools built on top of it, rather than simply a VCS.