Sitemap

Writing is for everyone.

Stop Fighting Git. Start Using It the Way Linus Intended

4 min readJul 27, 2025

Most developers treat Git like a glorified backup system. They create linear histories, fight merge conflicts, and complain about complexity. But Git wasn’t designed for this workflow. Linus Torvalds built Git as a distributed content-addressable filesystem optimized for tracking changes in large codebases with hundreds of contributors.

Understanding Git’s original design philosophy will transform how you work with version control.

Press enter or click to view image in full size

The Content-Addressable Storage Model

Git doesn’t store files. It stores content addressed by SHA-1 hashes. Every object (blob, tree, commit, tag) has a unique identifier based on its content.

Git Object Storage Architecture:

Working Directory
|
v
+-------------+
| Staging | <-- git add
| Area |
+-------------+
|
v
+-------------+
| Local Repo | <-- git commit
| (Objects DB)|
+-------------+
|
v
+-------------+
| Remote | <-- git push
| Repo |
+-------------+

When you commit, Git creates immutable snapshots:

# Each commit points to a tree object
git cat-file -p HEAD
# tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
# author John Doe…

Create an account to read the full story.

The author made this story available to Medium members only.
If you’re new to Medium, create a new account to read this story on us.

Already have an account? Sign in

The Latency Gambler

Written by The Latency Gambler

Tech critic exploring tools, systems & languages beyond hype. Linkedin-https://www.linkedin.com/in/kanishk-singh-140059189/

Responses (29)

Write a response

I have to disagree with you on the idea that "git was designed". Yes, it embraces the idea of parallel development and occasionally makes the process of merging between parallel branches possible. But it is hampered by and inconsistent command…

57

# Traditional (fighting Git)

Where is the "fighting" ? The "rebase" only rewrites the commits on the branch "feature" ..

37

Most developers treat Git like a glorified backup system. They create linear histories, fight merge conflicts, and complain about complexity.

Linear history is a very good thing because it makes it easy to read the history... and there is no fight aginst merges (use fast-forward ones).. conflicts happen... and you can do that during a rebase... and later use a squash.. to finally get a single commit...

29