On , I learnt ...

About git merge-base

Git’s merge-base command can be used to find the common ancestor for two commits (or branches/references). From the docs:

Given two commits A and B, git merge-base A B will output a commit which is
reachable from both A and B through the parent relationship.

For example, with this topology:


the merge base between A and B is 1.

This is useful for rebasing feature branches. This command:

$ git rebase -i `git merge-base head origin/master`

will open the interactive rebase editor with every commit from your feature branch selected.

If you often rebase commits to create a readable, self-contained history, this command is invaluable and I recommend you alias it to something easy to type. I have this in my ~/.bash_aliases file:

alias grb='git rebase -i `git merge-base head origin/$(git defaultbranch)`'

where the defaultbranch alias is defined in ~/.gitconfig as:

defaultbranch = "!f() { git symbolic-ref refs/remotes/origin/HEAD | cut -d/ -f4; }; f"