Hmm, that's a *very* valid point which I haven't thought about. Thanks for raising it :+1:

>When we checkout with a branch object, what do we set the current Head to? 

How about:
 - Checking out the commit pointed at by `Branch.Tip`
 - Looking up the commit that the branch currently points to (through a call to `Refs[branch.canonical].TargetIdentifier`)
  - If the retrieved sha matches the sha tip of the passed branch -> `HEAD` is a symref which still points to the `Branch.CanonicalName` reference (ie. the branch hadn't be modified on the filesystem since it was resolved)
  - If it differs -> We detach the `HEAD` and make it point to the sha of the tip of the passed branch.