Writing

Here I write about things that are interesting to me — Git, languages, technology, life. I promise that every word is hand crafted by a very human me and zero AI (though I may use it for images, tables, diagrams, etc).
Git

Git Wire Protocol v2: A Deep Dive

How Git's wire protocol was quietly rebuilt for the age of huge repos, load-balanced servers, and CDNs —…

Languages

On Using Flags to Represent Languages 🇯🇵 🇬🇧 🇫🇷

Why national flags remain the most universally recognizable way to represent languages in an interface —…

Tech

Hungarian Desks: Assigning Office Seats with the Hungarian Algorithm

How we replaced our office desk lottery with a weighted-bet form and the Hungarian algorithm to compute…

Languages

MIT Scientists Prove Adults Learn Language to Fluency Nearly as Well as Children

A viral MIT study got badly misreported. The data actually shows adults can reach near-native mastery —…

Languages

How to Talk about Language Learning

The six CEFR stages every learner passes through from first word to fluency — what you can do at each,…

Tech

Tips from GitHub: Customer Service is King

A lesson from GitHub: how fanatical customer service creates superfans, and why most companies get it…

Tech

GitHub Flow

Why we don't use git-flow at GitHub, and the simpler branch-and-deploy workflow we use instead.

Git

Reset Demystified

Demystifying git reset by following Git's three trees. This walkthrough later became part of the Pro Git…

Git

Note to Self

Attaching extra data to a commit without changing its SHA, using the little-known git notes command.

Git

Pro Git 简体中文版

Pro Git is now available in a simplified Chinese translation, thanks to the tireless work of Chunzi.

Git

Pro Git Kindle Version Available

Pro Git is now available as a proper Kindle edition, downloadable straight from the Amazon store.

Life

My New Blog

Retiring my old blog that hopped from host to host and domain to domain over the years, for something…

Git

Git Loves the Environment

A tour of the environment variables Git respects, and how they can quietly shape your workflow.

Git

Replace Kicker

Another hidden Git feature: using git replace to transparently swap one object in for another.

Git

Git's Little Bundle of Joy

Moving commits between repositories with no network at all, by packaging a push into a git bundle file.

Git

Rerere Your Boat...

Teaching Git to remember how you resolved a conflict so it can replay that resolution next time — git…

Git

Smart HTTP Transport

The new Smart HTTP transport in Git, and how it makes cloning and fetching over plain HTTP fast.

Git

Undoing Merges

Kicking off a series of Git tips with the tricky business of undoing a merge that's already been…

Life

This Year

A year-end reflection, after mostly stepping away from blogging through 2009.

Git

Translate This

Git makes forking and contributing easy — a call to help translate the Pro Git book into more languages.

Git

The Gory Details

Overwhelmed by the response to Pro Git's launch — 10,000 visitors on day one — plus notes on what comes…

Life

Do What You Want

Reflections sparked by Chris Wanstrath's StartupRiot keynote on building a company by doing what you…