Дерево представляет собой иерархическую совокупность файлов и каталогов, а не привязаны к какой - либо конкретной точке в истории. Например, если вы создаете файл, а затем удаляете файл (без других промежуточных коммитов), вы получите то же дерево, с которого вы начали.
Фиксации является точкой в истории вашего проекта. Коммит задает дерево, но также содержит другую информацию, такую как автор / коммиттер и время, сообщение о коммите (в котором автор описывает, что изменилось) и, что наиболее важно, ноль или более родителей, которые являются предыдущим состоянием хранилища. (Ваш первый коммит имеет нулевых родителей. Большинство коммитов после этого имеют одного родителя во время линейного развития и более одного в случае слияния.)
Вы можете понять, как это работает с git cat-file -p
командой, которая печатает содержимое определенного хэша, независимо от его типа. Например, чтобы посмотреть коммит HEAD, вы можете запустить:
$ git cat-file -p HEAD
tree 81ca1cb660ea79131336944df28b13b711d93557
parent 92b6b8fe9956866ace5397e060e7cc8ee1c76233
parent 7ea2575ed96d150ee19f70edea4bd42c7c2f0b83
author Mislav MarohniÄ <mislav.marohnic@gmail.com> 1436468108 -0700
committer Mislav MarohniÄ <mislav.marohnic@gmail.com> 1436468108 -0700
Merge pull request #951 from github/global-args
Avoid depending on a hardcoded list of git global flags
Чтобы увидеть дерево внутри этого коммита, вы можете cat-file -p
это дерево:
$ git cat-file -p 81ca1cb660ea79131336944df28b13b711d93557
100644 blob 730f77a3be502cfe6769c1305c0b59c22274caf5 .gitignore
100644 blob bcbd000f6b9ad5b0510f804ac4a3b19306b39c03 .travis.yml
100644 blob da71aa1fa3c3ae47b2fe5e6245ce2eea1586e278 CONTRIBUTING.md
...
Точно так же, если вы посмотрите на родителей, вы увидите, что это тоже коммиты. Сокращение для дерева внутри коммита, как rev
есть rev^{tree}
. Так что предыдущая команда могла быть написана git cat-file -p HEAD^{tree}
. Обратите внимание, что rev^
обозначает родителя rev
. При наличии нескольких родителей, rev^1
, rev^2
и т.д. Более подробная информация доступна в Rev-синтаксического анализа страницы человека мерзавца .
commit has
значит в начале вашего третьего абзаца?