profile

ESPRESSO FRIDAYS

Let's Save the (Git) Trees

Published about 1 month ago • 2 min read

Hi friends,

You know how companies use merge commits when working on projects?

Just go to one of your work projects and checkout the history of the main branch. It may look tidy (or not) but it’s bad for the environment (the real-world one 😉)

While that’s pretty standard, it actually makes things messy.

Every time we do this, it stops us from keeping our commit history nice and clean all the way through from development to production.

Here’s why that’s a bit of a problem: if we’ve already built and tested a commit, installing dependencies in the process and storing all its details, there’s really no need to go through all that again.

It’s like doing the same work twice, which wastes time and resources, which translate to environmental effects that compound and another financial waste if that’s not enough.

Plus, a cleaner git history makes it easier for us to figure out issues. It helps us use tools like git bisect much more effectively to find bugs. But we’ll talk more about that another time.

So, what’s the solution?

We start using something called interactive rebase on our feature branches. It’s really just a way to clean up our commit history before we merge it into the main branch. This might change the history, but since it’s just on our own feature branches, it doesn’t mess up anything for everyone else.

Here’s a quick guide on how to do it:

  1. Start on Your Feature Branch:git checkout -b my-feature
  2. Grab the Latest Main Branch Updates Without Switching:git fetch origin main:main (using main:main is a trick to fetch remote main changes to the local copy without switching back and forth)
  3. Interactive Rebase Time:git rebase main --interactive - This lets us pick and choose which commits to keep or squash, change the commits you want to s to make sure git squashes them into the parent commit, while keeping the changes.
  4. Safely Update the Remote Branch:git push --force-with-lease - This flag makes sure we don’t accidentally overwrite anyone else’s work.
  5. Prepare to Merge:git checkout main
  6. Merge Without Extra Commits:git merge --ff-only - - Keeps our history straight by avoiding merge commits.
  7. Push it Up:git push - And we’re done!

By making this part of what we do every day, our git trees will stay clean and easy to work with.

Hope you find this helpful! Always happy to hear your thoughts or answer any questions.

Enjoy your 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

Focus is a huge problem in modern days. These days, lots of apps and websites try to grab our attention and keep us hooked. Most of us know we should resist these distractions. But instead of making a plan, many people just wing it. I used to do that too. But I’ve had enough. Another Instagram post, YouTube short, or funny meme won’t make me feel good about my day. In fact, they: Make my workday longer. Slow down my progress, bit by bit. So, I put together some tools and rules to help me stay...

5 days ago • 3 min read

Hi friends, On July 15th, 2019, I messed up bad. Real bad. I wanted to finish a project quickly, and show a quick POC to a customer I was working with. To make a long story short, I pushed a container, to a public repo, containing admin credentials to an AWS account. I thought of myself as a senior consultant, who delivers, fast, with no mistakes. Man I managed to break that reputation. The silver-lining however, is that I learned my lesson. So deeply so, that I’ve implemented these same...

11 days ago • 3 min read

Hi friends, Today we’re going to explore a lesser-known but incredibly powerful feature of Git: git rerere. This feature is particularly useful for anyone who frequently manages branches and encounters merge conflicts. * not a real magician What is git rerere? The git rerere feature stands for “reuse recorded resolution.” It helps to automate the resolution of merge conflicts by remembering how you’ve resolved them in the past. When enabled, git rerere kicks in as soon as a conflict occurs...

19 days ago • 2 min read
Share this post