TL; DR: использовать коммит, а не дерево.
A tree в Git - это промежуточная структура данных. Если вы не занимаетесь программированием на Git низкого уровня (например, пишете новые команды Git), вам обычно даже не нужно знать, что они существуют. Но, для справки, каждый коммит содержит, или, точнее, относится к или указывает на , один объект дерева. Древовидный объект - это то, как коммит сохраняет полный снимок всех ваших файлов.
Обратите внимание, что имена веток, такие как master
, являются просто именами для одного конкретного коммита, со специальной особенностью, что один конкретный коммит, имена которого master
будут меняться со временем. Имена тегов, такие как v2.3
, являются также именами для одного конкретного коммита с намерением, что имя тега всегда будет называть этот конкретный коммит.
Уровень, на котором вы будете иметь дело с Git, - это commit , но обычно путем написания ветки или имени тега. Это по двум причинам:
Фактические хэш-идентификаторы большие, некрасивые и кажутся случайными. Они бесполезны для людей.
Как мы только что отметили, идентификатор хэша для ветви имени изменяется с течением времени. В частности, имя ветви идентифицирует последний коммит. Поэтому, если вам нужен последний коммит, вам не нужно знать его большой некрасивый хэш-идентификатор, вам нужно только знать, что все согласны с тем, что имя master
содержит этот идентификатор. Если вам нужен коммит для версии 2.3, вам нужно запомнить только имя v2.3
.
Каждое имя ветки является локальным для одного конкретного репозитория Git. То есть ваш master
- ваш; - это не то же самое, что и у других master
. Итак, когда ваш Git-репозиторий вызовет какой-нибудь другой Git-репозиторий, вы узнаете, что такое хэш-идентификатор их master
, но это не повлияет на ваш . Допустим, вы присвоили имя susan
этому другому хранилищу Git: ваш Git запомнит их master
как ваш susan/master
.
Следовательно, вы запустите:
git fetch susan
чтобы получить все из Git, который вы называете "Сьюзан", тогда:
git merge susan/master
для объединения с коммитом, который их Git вызывает master
, который ваш Git вызывает susan/master
.
(я рекомендую избегать git pull
, по крайней мере, до тех пор, пока вы не будете хорошо знакомы с Git. Вместо этого сначала запустите git fetch
, затем поэкспериментируйте, затем запустите вторую команду Git. Обратите внимание, что git pull
просто запускает git fetch
а затем немедленно запускает вторую команду Git, не давая вам возможности проверить, хорошая ли это идея.)