Коммит в git
никогда не существует с чистым содержимым файла, поэтому ваше первое предположение (SHA (содержимое файла)) никогда не бывает верным. Фактически, каждый файл, который вы регистрируете , сохраняется как объект, и имя этого объекта является SHA-суммой файла.
Но вы даже не просто регистрируете файлы, речь идет об файловой иерархии. Файловая иерархия напоминает древовидный объект, который содержит все файлы в этой (под) иерархии (отмеченные их именем объекта - SHA-сумма), именем и разрешениями файлов. Имя объекта древовидного файла является SHA-суммой в этом листинге. Это также работает рекурсивно, то есть вы можете ссылаться на древовидные объекты из древовидных объектов (так работают подкаталоги).
Ваш фактический коммит состоит из сумм SHA (0 или более) родительских коммитов, имени дерева-объекта, напоминающего корневой каталог репозитория, даты коммита, автора коммита, сообщения коммита и т.д. Имя коммита ("номер редакции") является SHA-суммой в этом листинге.