Как увидеть разницу между двумя одинаковыми ревизиями?
TL;DR
различное происхождение, пустой diff, другая программа. Как увидеть, в чем различия?
Я подумал, что ответ на вопрос должен быть таким: если они идентичны, различий нет.
Что сейчас происходит со мной, так это то, что у меня есть две разные ревизии, которые, кажется, имеют пустой дифференциал.
> git diff --quiet a1e4 5010; echo $?
> 0
Они имеют разные хеши коммита, программа, которую они содержат, ведет себя по-разному, но diff
пустой. Как это возможно?
Есть ли более мощный diff
Я не в курсе, что бы показать более глубокие различия?
Разве хэш не вычисляется только для контента? Тогда почему diff
ничего не обнаруживает?
Вот диаграмма
* 551d4dc very merge
|\
| |
| * a1e4b09 wow!
| |\
| | |
| | * a337e3c so uninteresting
| | |\
| | | |
| * | | a9f878a many unimportant
| |/ /
| | |
| * | 6d08e83 such irrelevance
| | |
* | | 5010427 wow!
| |/
|/|
| |
* | 74ac627 many father
|/
|
* f0aa6af such grandpa
|
.
2 ответа
Я подумал, что ответ на вопрос должен быть таким: если они идентичны, различий нет.
Содержимое двух коммитов одинаково, что означает, что git будет использовать тот же SHA-1 для дерева (указатель), но, как пояснили выше hobbs, коммит SHA-1 является контрольной суммой содержимого коммита.
Фиксация содержит деревья BLOB-объектов и дополнительную информацию.
Сам объект фиксации представляет собой просто контрольную сумму (SHA-1) метаданных, включающую в себя объект дерева для дерева данного коммита.
Коммит содержит больше информации, чем та, которая содержится на изображении ниже, например, отметка времени и многое другое.
Чтобы понять, что хранится в коммите, нам нужно понять, что такое коммит. Коммит - это метаданные, прикрепленные к контенту.
Каждый раз, когда вы добавляете файлы в git, они начинают отслеживаться и именоваться SHA-1 содержимого. Когда вы фиксируете изменения, git создает объект дерева, который указывает на дерево файлов, фиксируемых в этой ревизии.
Если не было сделано никаких изменений, дерево будет указывать на то же дерево, что и предыдущий коммит. Если произошли изменения, появится новое дерево.
Если вы хотите просмотреть содержимое коммита, используйте git show
git show <SHA-1>
Например, вот как это будет выглядеть в git show:
Разве хэш не вычисляется только для контента? Тогда почему diff ничего не обнаруживает?
Хеш дерева зависит только от его содержимого. Коммит содержит ссылку на дерево, а также сообщение о коммите, дату, автора, ссылку на его родительский коммит (ы) и т. Д., И его хэш является хешем всей этой информации. Два коммита могут отражать одно и то же состояние файлов и не иметь различий между ними, но иметь разные хэши. На самом деле, они должны.