DAGs
What makes VCSs different from backup applications is the ability to represent more than linear history. This is necessary both to support the simultaneous parallel development by different developers (each developer in their own clone of the repository) and to allow independent parallel lines of development – branches. For example, with a VCS, you might want to keep the ongoing development and the work on bug fixes for the stable version isolated. You can do this by using individual branches for those separate lines of development. So, the VCS needs to be able to model such a non-linear way of development and needs to have some structure to represent it.
The structure that Git uses (on the abstract level) to represent the possibly non-linear history of a project is called a Directed Acyclic Graph (DAG).
The following diagram (Figure 4.1) shows an example of a DAG, drawn in two different ways. The same graph is represented on both sides of the figure: using the free...