How to diff branches in Git
Posted 11th January 2020 in Development and Git
After posting my article on rebasing versus merging in Git, I decided to do a bit of digging around git log
, and it turns out it can solve the issues I was having with merging: quickly and cleanly seeing what I’ve done relative to master.
Branch diffs
We’re talking about commits here, so a git diff
isn’t what we’re after – that would give us the unstaged changes in the files themselves. We want a higher-level overview of the changes we’ve already made and commmitted on a branch.
git log
does more than I first thought – you can use it to view only the commits that’re different from the base branch. Very useful! This is how:
git log master..
Note: the ..
isn’t a typo!
That assumes you’re currently checked out on your working branch. If you’re not, all you have to do is specify the branch immediately after the two full-stops:
git log master..working-branch-name
Ignoring merge commits
As with most Git commands, git log
comes with a whole bunch of options. People do all sorts of clever stuff using the --pretty
flag, but it’s so complex and fiddly that typing it all out each time would be near-impossible. That’s where aliases come in , but while I’m learning Git on the command line, I’m trying to steer away from customisation. Luckily there’s a built-in option to remove the merge commits from the log view: --no-merges
.
You can also make the commit log more readable at a glance with --oneline
.
So to view a nice tidy version of the log, use:
git log --oneline --no-merges
And to roll this up with our branch diff:
git log master.. --oneline --no-merges
That solves the two downsides I listed with merging. Is it a reason to go back to merging? It could be. I’m very early in my git rebase
journey, so I’m going to stick it out for a bit longer.