---
answer: direct
beat: system-design
source: 1 article · updated: August 15, 2026
---

How does Git detect file changes without scanning every file on disk?

Git builds a Merkle tree: files are hashed into blob objects, directories into tree objects, and trees into a root tree. If a tree's hash matches the previous commit, everything inside is provably unchanged. Git skips entire subtrees, descending only where hashes differ. This reduces checking millions of files to comparing a handful of hashes.

Answered in

Merkle Trees: How Git Detects Changes in Milliseconds

Git hashes files into nested cryptographic trees to skip unchanged directories in one comparison, finding changes across millions of files faster than scanning.

Crashtech Editorial August 15, 2026 System Design

Read the full analysis

Other questions this article answers

More system design questions

Every answer on Crashtech is written by the editor of the article it comes from — never auto-summarised. Browse all answers or the System Design beat.