These were both solved as part of the data model via globalrevs and obliteration respectively. But that is besides the point here? The next time you're designing a source control system you're welcome to pick your favorite points in the design space.