Git manages repositories as a data structure layered on top of the file system. In Git, you think about changesets, also known as commits. A changeset means conceptually different things on different levels (and this trips-up newbs). A change set is a:
- Concise list of the changes between one revision and the next.
- Reference ID.
- Node in a graph.
A Git repository is an object-oriented database. The schema of its data structure is that of an Acyclic Directed Graph. The Objects in the database are the nodes in the graph (trees, folders, tags). Each node is a change-set. It’s a snap-shot of the current state of a branch, and it is called a “Commit,” and the edges are pointers to the previous node.
Commits are objects that contain pointers to the previous commit (parent – child relationship). Merges are commits that point to two or more parent commits.