---
title: 'Demystifying Git: Trees, Blobs, and DAGs'
description: 'Peeking under the hood of Git object storage and Directed Acyclic Graphs.'
subtitle: 'How Git stores every change in simple, content-addressable files.'
date: '2024-01-15'
lang: 'en'
---

Git is fundamentally a content-addressable key-value store with a VCS interface layered on top.

## The Four Git Objects

- **Blob**: Contains file data without metadata or filename.
- **Tree**: Represents a directory, linking filenames to blobs or child trees.
- **Commit**: Points to a top-level tree, author, timestamp, and parent commit(s).
- **Annotated Tag**: A permanent pointer to a specific commit with a message.

Understanding this mental model demystifies commands like `git rebase` and `git cherry-pick`.
