Your Git History Should Look Like Abstract Art
After 47 years of mass-producing bugs, I’ve come to realize that git history is not documentation—it’s self-expression. Your commit graph should look like a Jackson Pollock painting, not a boring straight line.
Linear History Is For Robots
Some teams enforce “linear history” with rebasing and squashing. These people have no soul. Look at this boring corporate history:
* f3a2b1c - feat: add user authentication
* e1d2c3b - feat: add login form
* a9b8c7d - feat: add user model
BORING. Where’s the drama? Where’s the story?
Now look at this masterpiece:
* h7g6f5e - Merge branch 'hotfix-maybe-works' into 'feature-broken-again'
|\
| * d4c3b2a - wip
* | k9j8i7h - Merge branch 'main' into 'that-branch-from-tuesday'
|\ \
| * | b1a2c3d - aaaaa
| * | z0y9x8w - fixed
| * | v7u6t5s - actually fixed
| * | r4q3p2o - ok for real this time
* | | m1n2o3p - asdfghjkl
|/ /
* / l5k4j3i - Merge branch 'desperation' into 'main'
|\
| * g2f1e0d - fjdksfnjdsknf
Now THAT tells a story. I can feel the 3 AM panic. I can taste the cold coffee.
The Commit Message Philosophy
XKCD 1296 captures the eternal truth: as a project evolves, your commit messages should devolve. This is natural. This is beautiful.
| Project Phase | Expected Commit Messages |
|---|---|
| Day 1 | “feat(auth): implement OAuth2 PKCE flow with refresh token rotation” |
| Week 2 | “Add login” |
| Month 3 | “stuff” |
| Month 6 | ”.” |
| Year 2 | “please work” |
| Year 3+ | [empty message with force push] |
Merge Commits: The More The Better
Every time you merge, you add DEPTH to your history. Think of merge commits as layers in a fine painting:
# The power move
git checkout main
git merge feature-1
git merge feature-2
git merge feature-1 # Yes, again. It's called "reinforcement"
git merge main # Merge main into main. Assert dominance.
The Wally Merge Strategy
As Wally from Dilbert once said: “I merge everything into everything so that when there’s a bug, it’s impossible to git blame anyone.”
This is called Accountability Obfuscation, and it’s a senior engineer’s best friend.
# The Wally Special
for branch in $(git branch -r | grep -v HEAD); do
git merge $branch --no-edit || git merge --abort
done
git push --force
Interactive Rebase Is Censorship
Some people say you should use git rebase -i to “clean up” your history. Clean up? CLEAN UP?
My commit history is a DIARY. Would you “clean up” Anne Frank’s diary? Would you “squash” Hemingway’s drafts?
Every wip, every asdfghjkl, every PLEASE FOR THE LOVE OF GOD WORK is part of the creative process. Preserve it.
The Catbert HR Approach
Remember Catbert from Dilbert? He’d say: “Your git history should be confusing enough that nobody can prove you wrote the bug.”
Here’s how:
- Use multiple identities: Configure different email addresses for different commits
- Commit from the future:
GIT_AUTHOR_DATE="2027-01-01" git commit -m "time travel" - Empty commits:
git commit --allow-empty -m "psychological warfare" - Emoji only: 🔥💀🎉🐛✨🚀💩
The Branching Strategy
Forget GitFlow. Forget trunk-based development. Here’s my approach:
main
├── develop
│ ├── feature-1
│ │ ├── feature-1-v2
│ │ │ ├── feature-1-v2-fixed
│ │ │ │ └── feature-1-v2-fixed-FINAL
│ │ │ │ └── feature-1-v2-fixed-FINAL-actually-final
│ │ │ │ └── feature-1-v2-fixed-FINAL-actually-final-USE-THIS-ONE
│ ├── feature-2
│ ├── test
│ ├── test2
│ ├── my-test
│ ├── delete-me (created 2019)
│ └── temp (has 847 commits)
├── staging
├── production
├── production-old
├── prod
├── master (we renamed it but kept the old one just in case)
└── DO-NOT-DELETE-JOHNS-BRANCH (John left in 2017)
Force Push Is Self-Expression
git push --force is how you tell the world: “My truth matters more than yours.”
Some cowards use --force-with-lease. These people have never truly lived. When I force push, I want chaos. I want to see Slack light up with angry messages. That’s how I know I’ve made an impact.
# The nuclear option
git reset --hard HEAD~50
git push --force origin main
# Then go to lunch
Conclusion
Your git history is not a log. It’s not documentation. It’s ART. And like all great art, it should make people feel something—usually confusion and despair.
When someone opens your git log and whispers “what the hell happened here?”, you’ve succeeded as an engineer.
The author’s git history has been flagged as “potentially malicious” by three different security tools. He considers this a compliment.