Understanding Git internals
medium.com