Version Control
A system recording the history of a project's files, enabling branching, merging, and recovery.
Version control records the successive states of a project so that any past state can be recovered, changes can be attributed, and independent work can proceed in parallel and be recombined. Git is the near-universal implementation.
Git's model is worth understanding directly, because most confusion with it comes from working against the model rather than with it. A repository is a content-addressed object store: every file version, directory tree, and Commit is stored under the hash of its contents, and a commit records a tree plus its parents. Branches are just movable pointers into that graph. Nothing is ever modified in place; operations that appear to rewrite history create new objects and move pointers.
Two consequences matter constantly. Anything committed is recoverable, even after a branch is deleted or a reset appears to destroy it — the objects persist until garbage collection. Anything not committed is not protected, which is why a destructive command in a shared working directory is genuinely destructive and why committing frequently is a safety practice rather than a bookkeeping one.
History is also a document. It is the durable answer to why is this here, which is what makes a change description part of the deliverable rather than paperwork; see Provenance.
See also7
Hand-picked in the note itself — the neighbours worth reading next.
Commit
A recorded snapshot of a project with a message explaining it.
Version Control & Delivery9 connections
Branching Model
The convention governing what branches exist, what they mean, and how work reaches production.
Version Control & Delivery11 connections
Three-Way Merge
Combining two lines of work by comparing both against their common ancestor.
Version Control & Delivery11 connections
Git Worktree
An additional working directory attached to one repository, each on its own branch.
Version Control & Delivery10 connections
Hash Function
A function mapping arbitrary input to a fixed-size digest, used for identity, integrity, and addressing.
Systems & Tooling7 connections
Monorepo
Several packages developed in one repository with shared tooling and atomic cross-package changes.
Systems & Tooling8 connections
Regression
A previously working behaviour that a change has broken.
Method16 connections
Related2
Nearby in the graph rather than deliberately chosen. Looser, sometimes surprising.
Linked from12
Notes elsewhere in the wiki that reach for this one.
- Atomic CommitVersion Control & Delivery
A commit containing exactly one logical change, complete and independently sound.
- Branching ModelVersion Control & Delivery
The convention governing what branches exist, what they mean, and how work reaches production.
- CommitVersion Control & Delivery
A recorded snapshot of a project with a message explaining it.
- Conventional CommitsVersion Control & Delivery
A lightweight convention giving commit messages a machine-readable type and scope.
- Git WorktreeVersion Control & Delivery
An additional working directory attached to one repository, each on its own branch.
- Hash FunctionSystems & Tooling
A function mapping arbitrary input to a fixed-size digest, used for identity, integrity, and addressing.
- MonorepoSystems & Tooling
Several packages developed in one repository with shared tooling and atomic cross-package changes.
- ProvenanceMethod
The recorded origin of a change or a claim — who made it, when, and on what evidence.
- RebaseVersion Control & Delivery
Replaying a branch's commits onto a new base, producing new commits with the same changes.
- RegressionMethod
A previously working behaviour that a change has broken.
- Squash MergeVersion Control & Delivery
Collapsing a branch's commits into one before merging, trading granularity for a clean main history.
- Three-Way MergeVersion Control & Delivery
Combining two lines of work by comparing both against their common ancestor.