Over the years, I've both written and spoken about Git in articles, presentations, workshops or by answering questions on Stack Overflow.

In more than one occasion, I've found myself wanting to link to one of those resources but not being able to find it. This page is an attempt to group everything together in a single place to make it easier to reference in the future. I hope you find it useful.


I made a rule for myself that every time I learn a new peculiar thing about Git, I write it down. Every once in a while, I'll come across something that really needs explaining, so I'll write an article about it. Here are the links to my Git notes so far.

The Case for Pull Rebase

When using a Trunk-based development workflow, the standard git pull command is going to clutter your history with a bunch of merge commits, simply due to the asynchronous nature of collaboration. Fortunately, there’s a somewhat obscure way to make things right.
Continue reading ↦

The Invisible Commits — Part 1

Your repository has more commits than what meets the eye. They hide somewhere in the .git directory — where you can’t see them — but they’re there. I call them the invisible commits.
Knowing where to find them, can sometimes mean the difference between being able to recover your work and losing it to the sands of time.
Continue reading ↦

What's in a Branch

Regardless of how you choose to track your history, one of the things you often want to know is which commits are in what branch. Sounds easy enough, right? And yet, you wouldn't believe just how cumbersome certain version control systems make answering such a simple question. What I think you'll find even harder to believe, however, is the fact that with Git it's as easy as pie. Continue reading ↦

Git Undo

Tell me if you recognize this scenario: you’re in the middle of rewriting your local commits when you suddenly realize that you have gone too far and, after one too many rebases, you are left with a history that looks nothing like the way you wanted. No? Well, I certainly do. It was in one of those moments of despair that I finally decided to set out to create my own git undo command. Here’s what I came up with and how I got there.
Continue reading ↦

The Importance of a Good-looking History

Since the dawn of civilization, common sense has taught us that the way forward starts by knowing how we got here in the first place. While this powerful principle applies to practically all aspects of life, it’s especially true when developing software. For us programmers, the rear mirror through which we look at the history of a code base before we go on to shape its future is version control. Among all the information captured by a version control tool, the most critical ones are the commit messages.
Continue reading ↦

Grokking Git by Seeing It

When I first started getting into Git a couple of years ago, one of the things I found most frustrating about the learning experience was the complete lack of guidance on how to interpret the myriad of commands and switches found in the documentation. What I was looking for, was a way to represent the state of a Git repository in some sort of graphical format. In my mind, if only I could have visualized how the different combinations of commands and switches impacted my repo, I would have had a much better shot at actually understand their meaning.
Continue reading ↦


Sometimes, I have more things to say than can fit in an article or a presentation. That's when I make a course instead. However, those take longer so there are fewer of them. In any case, rest assured that every time I publish a new one, you'll find a link for it here.

Advanced Git Tips and Tricks Pluralsight

If you've been using Git for a while, you probably know how to use it like any other version control system; you commit files, review changes, maybe even create and merge branches. That's how most people use it. But Git is unique in that it's more powerful and puts you in complete control of your source code history. This course will teach you how to use Git's advanced features to improve your daily workflow. By the end of this course, you'll have discovered just how much potential lies hidden behind the surface of git commit and git branch — potential that will serve you well every single day.


A selection of some of my most popular presentations about Git from recent years. I linked to the slides and demo material as they were available. If a talk was recorded, I made sure to include a link to the video as well. For my other presentations, check out my speaking page.

How Effective Teams Use Git
NDC DevOps 2020 NDC Oslo 2020

In this talk, I share with you what I've learned from working with people who are really good being productive using Git. I show you the things you can do to make Git more pleasant to work with and improve the way you collaborate with the rest of your team. Success starts with good habits—by seeing how effective teams use Git in their daily work, I hope you'll be inspired to pick up a new one.

Understanding Git — Behind the Command Line NDC Oslo 2019

In this talk, I show you how Git works from the ground up. I start out by going through Git's fundamental concepts and how they're implemented in the object model. From there, I work my way up to the user-facing commands and show you how to take advantage of Git's unique features to craft a beautiful history without having to compromise on your workflow. If you ever wished you knew how Git really works, then this presentation is for you.

The Things Git Can Do NDC Oslo 2016

In this talk, I demonstrate exactly what Git can do for you that none of the GUI tools ever tells you about. Moving chunks of commits between branches in a single command, custom history visualizations and data recovery are only some of the things I demonstrate, all 100% from the command line. If you're using Git through a GUI, you're missing out and in this talk I show you why.

Git Tips and Tricks WROC# 2016

In this talk, we'll learn to take advantage of Git's advanced — and therefore lesser known — features to take our daily workflow to the next level. Since staring at the command line alone can be daunting at times, we'll also be looking at a graphic representation of our Git repository. As we run different commands, we'll see immediately how they affect the underlying history. This will help us understand how they work at a fundamental level, making it easier to remember them and use them in the right situation.

Grokking Git by Seeing It Leetspeak 2012

In this talk, I teach you the Git zen from the inside out. Working out of real world scenarios, I walk you through Git’s core concepts and building blocks, building our way up to more advanced features. And I do it by showing you graphically what happens under the covers every time you fire a Git command. It’s my belief that this kind of deep understanding of Git’s inner workings is the key to unlock its true power: taking control of your history.

What Others Are Saying

Here's some of the feedback I received from people who watched my Pluralsight courses or attended one of my presentations:

What a course!! This will really take your Git workflow to another level. Thanks and enormous kudos to @ecampidoglio!!

Maja Gaćica

"Advanced Git tips and Tricks" by @ecampidoglio course on Pluralsight is paying for itself. So much good info there!

Igal Tabachnik

Your passion to Git and level of knowledge inspires me to learn it too :) BTW, thanks for the great Pluralsight course about Git - it's awesome. Started to use some tricks like commit --fixup or rebase --whitespace=fix - real life saver.

Alex Povar

@ecampidoglio I'm really enjoying your "Advanced Git Tips and Tricks" Pluralsight course. Well explained & very useful!

José Pedro Dias

"The things Git can do that none of the GUIs ever told you about" with @ecampidoglio was easily the best #techorama session yet!

Mark Seemann

Really great talk from @ecampidoglio at NDC Oslo on Git. First time I've actually understood "low level" git-stuff.

Thomas Darvik

Enrico’s Git talks are always brilliant. Highly recommend you check him out.

Mat McLoughlin


If you'd like me to speak at your company or event, you can find more information on the contact page.