> HEAD~3, by contrast, refers to following the parent's parent's parent,
More specifically, following the first parent only. man git-rev-parse (surprisingly) has a nice explanation:
> A suffix ~<n> to a revision parameter means the commit object that is the <n>th generation ancestor of the named commit object, following only the first parents. I.e. <rev>~3 is equivalent to <rev>^^^ which is equivalent to <rev>^1^1^1.
More specifically, following the first parent only. man git-rev-parse (surprisingly) has a nice explanation:
> A suffix ~<n> to a revision parameter means the commit object that is the <n>th generation ancestor of the named commit object, following only the first parents. I.e. <rev>~3 is equivalent to <rev>^^^ which is equivalent to <rev>^1^1^1.