tag, ref, and branch are all the same thing to us. Why store them separately?