This is built in to vim.
For those interested, here's the Vim docs for the undo tree
My approach was linear, not a tree. The innovation (a small one) is how to make linear actually feel kinda ok, but at the same time not lose work.
If I understand correctly, the vim undo tree is a superset of your approach: in vim you can go forward and backward in time, seeing all versions of the file, and need not explicitly deal with the tree.