Предыдущий ролик Следующий ролик  

Видео урок: Как обратиться к коммитам

Git: обучение основам

В этой главе мы изучим, как перемещаться по дереву коммитов репозитория. Чтобы сделать это, для начала мы поговорим о тех способах, которыми мы можем ссылаться на коммиты в Git. Некоторые основные способы мы уже изучили, но есть и другие, и их тоже полезно знать. А начнем мы с того, что введем новое понятие в Git, которое называется "древоподобность" (tree-ish). Это довольно забавное слово, и мы говорили о том, что такое дерево в Git. Это структура файлов в Git репозитории. Она похожа на директорию в вашей файловой системе. В Git "древоподобность" (tree-ish) обозначает нечто, что относится к части дерева. "Подобность", потому что они могут отличаться друг от друга.

"Подобность" указывает на то, что нечто напоминает что-то другое. Treeish - это важный термин, потому что он представлен в документации для Git. Мы посмотрим, как использовать команду, и Git скажет вам, что вы можете передать tree-ish в качестве аргумента команды. Если пояснить это по-простому, tree-ish - это ссылка на коммит, потому что этот коммит затем ссылается на дерево, Git репозиторий и все файлы, которые находятся здесь на данный момент. В общем, если вы не хотите думать обо всех тех вещах, чем может быть tree-ish, вот самая простая версия - это что-то, что указывает на коммит.

Итак, как можно сослаться на коммит? Самый простой способ сделать это - это использовать хеш SHA-1, использовать всю строку в 40 символов, чтобы сослаться на коммит. Git всегда будет знать, какой коммит мы имеем ввиду, потому что каждая из этих строк в 40 символов является уникальной, и как ремарка, если вам интересно, как Git убеждается, что все они уникальны, то никак, но случайность того, что они могут быть не уникальны, является фактически невероятной. Мы говорим о том, что нам нужны просто миллиарды объектов, чтобы появился хоть один шанс, что у нас будут два объекта с одним SHA-1 хешем.

Это настолько неправдоподобно, что в ежедневной работе мы предполагаем, что они уникальны. Другой способ, которым мы можем обратиться к коммиту, это использовать сокращенную версию хеша. Нам не нужен весь номер, мы можем использовать его часть, а поскольку эти номера так уникальны, Git может воспользоваться лишь маленькой частью и найти объект, который мы ищем. Нам нужно предоставить всего четыре символа и этого достаточно, чтобы все было недвусмысленно. Однако, недвусмысленность зависит от размера нашего проекта. Если, например, у нас проект с пятью коммитами, тогда 4 символов достаточно, чтобы Git знал, о каком из этих 5 коммитов мы говорим.

Если мы работаем над проектом средних размеров, лучше иметь 8-10 символов, а если мы работаем над действительно большим проектом, где закоммичены миллионы объектов, например, ядро Linux, ну тогда нужно иметь 12, 13, возможно, даже 15 символов, чтобы убедиться, что Git сможет найти объект, который вы ищете. Я советую остановиться на 8-10 символах, пока не понадобится больше. Ну и также мы видели, что можно сослаться на коммит, используя указатель HEAD. Помните, HEAD всегда указывает на коммит, который находится на верху текущего бранча, где был сделан чекаут.

То есть tree-ish будет указывать на часть дерева. Также мы можем использовать ссылку на бранч. Если мы используем ссылку на бранч, тогда мы будем ссылаться на верхушку бранча. И это не обязательно должен быть бранч с текущим чекаутом, это может быть бранч без чекаута. В следующей главе мы более подробно поговорим о том, как работать с бранчами. Также мы можем использовать ссылку tag. Мы не будем говорить о tag в данном руководстве, только упомянем, что это тоже способ, чтобы сослаться на коммиты. И последний способ, которым мы можем обратиться к коммитам, заключается в использовании одного из этих методов, а затем в обращении к предкам этих объектов.

Давайте посмотрим, как это делается. Если мы хотим обратиться к родительскому коммиту, мы сначала даем ссылку на то, на чем мы хотим сфокусироваться, а затем мы говорим найти его родителя, знак вставки. Итак, знак вставки идет сразу после объекта, то есть он указывает на родителя в дереве. Если вы подумали о генеалогическом древе, когда предки находятся на верхушке, а дети внизу, мы продолжим. Мы передвигаемся к предку, и об этом нам говорит природа знака вставки. Мы также можем использовать нотацию с тильдой, то есть ссылка на коммит, а затем тильда, а затем число "поколений", на которое мы хотим подняться.

Итак, HEAD перемещается, мы также можем остановиться на каком-то, это как предполагается. В данном случае большинство людей используют знак вставки, а не тильду, но они делают одно и то же. Если наш HEAD коммит - это acf87504, тогда все пять примеров ссылаются на один и тот же коммит. Они все ссылаются на родительский коммит acf87504. В дополнение к родительскому коммиту мы можем обратиться к коммиту-предку. Конечно, если нам нужен родитель родителя, мы тогда просто вставляем две стрелки. Мы говорим начать с HEAD и дважды подняться, это даст нам родителя родителя.

И вот в этом случае нотация с тильдой более полезна, потому что сейчас мы можем написать HEAD~2, это особенно очевидно, когда нам нужно добраться до далекого предка-коммита, потому что иначе у нас будет много знаков вставки, которые следуют за нашими коммитами, а нотация с тильдой гораздо компактнее и проще, как мы это и видели. Мы идем от HEAD, проходим три коммита к далекому предку. Вот это способы, как мы можем обратиться к коммитам, находящимся в дереве коммитов. В следующем ролике давайте попрактикуемся и попробуем их использовать.