Mercurial (hg) también utiliza hashes SHA1. Simplemente también trata de obtener números de revisión del historial de compromisos. Sin embargo, estas revisiones solo son válidas en un repositorio. Si mira otro repositorio, no se garantiza que estas revisiones coincidan.
En cuanto a por qué git y mercurial utilizan hash: ambos tienen un historial de compromiso no lineal. debido a que ambos se distribuyen, las personas pueden trabajar en la misma base de código en sus repositorios locales sin tener que sincronizar con una autoridad central (como lo requieren SVN y CVS). Ahora bien, si las personas confían sus cosas localmente y las fusionan más adelante, tendrá dificultades para encontrar un esquema coherente para formar revisiones de números enteros en aumento lineal. E incluso si pudieras, obtendrías un resultado diferente entre repositorios diferentes.
Al final, todo se debe a la naturaleza distribuida. Es una forma simple de encontrar identificadores únicos para commits. Y como un producto secundario también puede codificar la historia completa hacia una única confirmación en el hash. Lo que significa que, incluso si tiene la misma diferencia en una confirmación, probablemente obtendrá diferentes valores hash SHA1.
Para ser precisos, la suma de comprobación no es de los * cambios * realizados en la confirmación, es de todo el árbol, y sí, incluye el mensaje de confirmación. También se hace referencia a cada árbol por un nombre SHA1, como lo es cada archivo en ese árbol. –