Fair enough. In that case, I agree with @jamill that we should probably throw if `Checkout()` is called and the branch has changed since `Branch` was created. Or maybe let `Checkout()` take a flag to specify behavior should that be the case.