This is partially inspired by

   git: how to insert a commit as the first, shifting all the others?
   http://stackoverflow.com/q/645450/19750

Version control is about decoupling the patch of some changes with their
results. This lets you do neat things like cherry picking and rebasing,
and of course just viewing a diff.

Sometimes you want to take two snapshots and unify them with a merge or
unify them with a "theirs" merge.

Sometimes you want to take two snapshots and tell the VCS that one was
produced from the other --- to invent a merge base where none previously
existed, for example.

So T is the root of master, and we're working on newroot, and we want
T to apply cleanly to newroot.

   (newroot)$ git cherry-pick T
   # Conflicts etc.

That won't do.

   (newroot)$ git read-tree T
   (newroot)$ git commit

That will, and now we can rebase onto newroot master.