<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/always-be-blaming-yi37onju1" -->

---
title: Always Be Blaming | daily.dev
description: A practical guide to understanding code history beyond simple `git blame`. The author describes a multi-dimensional approach to reading code: understanding a...
canonical: https://daily.dev/posts/always-be-blaming-yi37onju1
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Always Be Blaming | daily.dev
og:description: A practical guide to understanding code history beyond simple `git blame`. The author describes a multi-dimensional approach to reading code: understanding a...
og:url: https://daily.dev/posts/always-be-blaming-yi37onju1
og:image: https://api.daily.dev/og/posts/yi37OnjU1.png
og:image:alt: Always Be Blaming
og:image:width: 1200
og:image:height: 630
og:locale: en
---

[matklad](https://daily.dev/sources/matklad)

[Read post](https://api.daily.dev/r/yi37OnjU1)

# [Always Be Blaming](https://api.daily.dev/r/yi37OnjU1 "Go to post")

This title could be clearer and more informative.Try out Clickbait Shieldfor free (5 uses left this month).

A practical guide to understanding code history beyond simple \`git blame\`. The author describes a multi-dimensional approach to reading code: understanding a snapshot (2D), tracing its evolution over time (3D), and grasping the original author's intent using 'theory of mind' (4D). Practical tips include using GitHub's web blame interface with keyboard shortcuts (y, b, ctrl+f, cmd-click) to get a 'virtual checkout' at any historical commit. The author also shares a local Emacs-based workflow using a dedicated git worktree, with custom shortcuts to blame a specific line, navigate to parent commits, undo blame steps, and copy GitHub links to commits. A key insight is that \`git blame\` answers the wrong question — it annotates files, but developers need temporal history of specific code snippets.

[#git](/tags/git "Check all #git posts")

May 18•6m read time•From [matklad.github.io](https://api.daily.dev/r/yi37OnjU1 "matklad.github.io")

[![Post cover image](https://media.daily.dev/image/upload/s--P4t4XyoV--/f_auto/v1722860399/public/Placeholder%2001)](https://api.daily.dev/r/yi37OnjU1 "Go to post")

886 Impressions1 Repost

Comment

Bookmark

Copy

![Placeholder image for anonymous user](https://media.daily.dev/image/upload/s--qsFuKGv_--/t_logo,f_auto/public/noProfile)Share your thoughtsPost

[![matklad's image](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/c34dbbf360354a179786e8a127718b12)](https://daily.dev/sources/matklad)

[matklad](https://daily.dev/sources/matklad "https://daily.dev/sources/matklad")

Matthias Noback's expertise in PHP and domain-driven design (DDD) offers readers insights into buil... Read more

33 Followers

•

474 Upvotes

#### Would you recommend this post?

Copy link

WhatsApp

Facebook

X

New Squad

Copy linkShare with your friends

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Always Be Blaming","url":"https://daily.dev/posts/always-be-blaming-yi37onju1","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/always-be-blaming-yi37onju1"},"datePublished":"2026-05-18T14:22:00.165Z","dateModified":"2026-05-18T14:22:22.104Z","description":"A practical guide to understanding code history beyond simple `git blame`. The author describes a multi-dimensional approach to reading code: understanding a...","image":"https://media.daily.dev/image/upload/s--P4t4XyoV--/f_auto/v1722860399/public/Placeholder%2001","thumbnailUrl":"https://media.daily.dev/image/upload/s--P4t4XyoV--/f_auto/v1722860399/public/Placeholder%2001","isAccessibleForFree":true,"articleSection":"matklad","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"matklad","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/c34dbbf360354a179786e8a127718b12","url":"https://daily.dev/sources/matklad"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/always-be-blaming-yi37onju1","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"git","timeRequired":"PT6M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"matklad","item":"https://daily.dev/sources/matklad"},{"@type":"ListItem","position":3,"name":"Always Be Blaming"}]}
```

