So You Think You Know Git


Hi friends!

“The nice thing about Git is that it’s very general. … There is a lot of stuff you can do with Git; it’s not just version control that it’s fun to play with.”

- Scott Chacon​, GitHub's co-founder

A recent talk with the same title as this email was given by Scott Chacon, founder of GitHub, to students earlier this year. I was so inspired by it that I watched it repeatedly and decided to summarize the tips and tricks I discovered—features I didn’t even know existed after a decade of using Git daily.

Git is getting close to 200 subcommands 🤯, here are some unknown yet super useful ones!


1. Conditional Configurations

Did you know you can set conditional configurations in Git? This allows you to use different settings for different projects. For instance, you can set a global email for most repositories and a specific email for work projects without changing settings manually every time. Just use a relative path in your config file and let Git handle the rest.

Here’s an example git config:

[include]

path = ~/foo.inc ; find "foo.inc" in your `$HOME` directory

; include if $GIT_DIR is /path/to/foo/.git

[includeIf "gitdir:/path/to/foo/.git"]

path = /path/to/foo.inc

2. Custom Aliases

Creating custom aliases can save you a lot of time. For example, you can alias the stash command to include untracked files:
git config --global alias.stasha 'stash --all'

Now, running `git stasha` will stash everything, including new untracked files.

3. Reuse Recorded Resolution (rerere)

Git’s rerere (reuse recorded resolution) feature can remember how you resolved conflicts and apply those resolutions automatically in the future. This is a hidden gem that saves time on recurring merge conflicts. Enable it with:


git config --global rerere.enabled true

4. Enhanced Blame and Log

Using git blame with the -w flag ignores whitespace changes, making it easier to see who made significant changes:

git blame -w <file>

Similarly, git log -S <expression> can search for specific expressions within your commit history. Add the -p flag to see the diffs:

git log -S <expression> -p

5. Code Movement Awareness

The git blame command with -C detects code movement within files. Running it twice (-C -C) or thrice (-C -C -C) can even track code movement across files:


git blame -C -C <file>

New Git Features!

Git continuously evolves, and here are some fresh additions:

  • Column View for Branches: Display branches in columns for better readability:


git branch --column

  • Sign Commits with SSH: Sign your commits using SSH keys instead of GPG:


git config --global gpg.format ssh
git config --global user.signingkey <your_public_ssh_key>`

  • Maintenance Tasks: Automate repository maintenance tasks to optimize performance:


git maintenance start git maintenance run --schedule=hourly

  • Safe Force Pushes: Avoid overwriting others’ changes with --force-with-lease:


git push --force-with-lease


That's it!

I hope you found it useful. Please reply with any feedback or questions.

Have a great weekend!

Whenever you’re ready, here’s how I can help you:

ESPRESSO FRIDAYS

Every once in a while I send hand picked things I've learned. Kind of like your filter to the tech internet. No spam, I promise!

Read more from ESPRESSO FRIDAYS

6 Neovim Plugins I Use To Troll Code Reviewers The Espresso Fridays is brought to you by: Zero To Running a Kubernetes Application Without Weeks of Studying A hands-on Kubernetes guide to deploy your first scaleable application In under 90 minutes you'll: ✅ Learn all the critical Kubernetes basics from a 10-year industry expert ✅ CUT learning time by 60% with a hands-on application deployment walkthrough ✅ Never feel inexperienced again with the hottest technology in the market Start learning...

Hi friends, Ever felt like your remote pair programming sessions were missing that seamless, in-person collaboration feel? You’re not alone. Many developers struggle to recreate the magic of side-by-side coding in a virtual environment. A recent study shows that pair programming has been proven to catch mistakes early, reduce defects, and lead to better designs. The same study found that teams who practice pair programming not only produce shorter, more efficient code but also solve problems...

Hi friends, Are you tired of juggling multiple apps for note-taking and writing? Many of us struggle to find a seamless system that combines powerful text editing with effective note organization. While popular note-taking apps offer fancy features, they often fall short for those who prefer a keyboard-centric, or should I say Vim-centric workflow. Most people resort to using dedicated note-taking applications like Obsidian, Notion, or even Apple notes. These tools are great for casual users,...