Merkle Trees Explained: Hash-Based Data Structures in Git and Blockchain