Ответ на второй вопрос: да (невозможно и т. Д.).
Первый вопрос не так хорошо сформирован, как я думаю, вы можете захотеть, потому что хеш-фиксация на самом деле просто основана на данных фиксации. Ключ, который вызывает ответ на второй Вопрос в том, что «в совершающие данные» включает в себя следующие основные элементы, которые вы можете увидеть в фактической фиксации:
$ git cat-file -p HEAD
tree 22abd5c3fed5e2f49fb71e10b39d8c4929e51fc7
parent 4ebdeb68ba87282f87c39d790ba17fe1e021cc97
parent 9eabf5b536662000f79978c4d1b6e4eff5c8d785
[snip]
tree
линия дает хэш дерева (которое зависит только на содержимом дерева) и parent
строк-два, в этом случае, как HEAD
является слиянием commit-дать хэши родительской фиксации. Учитывая, что хеш текущего фиксации зависит от хеш (е) его дерева и родительских элементов, если вы должны были построить другое репо с другой историей или другим деревом, у них были бы разные хэши, чтобы коммит также имеют другой хеш.
(технический термин, обычно используемый здесь Merkle Tree.)
Каждый коммит реф к предыдущей, более подробно здесь: https://git-scm.com/book/en/v2/Git- Internals-Git-Objects # Commit-Objects –
спасибо за дополнительную ссылку – PhilLab