Ключевой элемент, к которому вы попадаете - источник вашего вопроса, - это то, что имена веток совсем не значат в Git. Это просто подвижные указатели , которые по определению указывают на последний коммит в ветви. Несколько имен могут указывать на любой коммит.
В Git значение имеет коммит . Это коммит Git's raison d'être . Коммиты получают хеш-идентификатор просто путем создания, потому что, как и все четыре типа объектов Git, хеш-идентификатор является криптографической контрольной суммой содержимого коммита. Поскольку каждый коммит уникален - у него есть временная метка, чтобы помочь, в случае, если все else в коммите совпадает с предыдущим - каждый коммит получает новый уникальный хэш-идентификатор.
Однако хеш-идентификаторы коммитов кажутся случайными и невозможными для запоминания или работы с людьми. Поэтому нам нужен какой-то способ назвать последний коммит, который мы хотим запомнить. Этот способ, как правило, с именем ветви . Получив коммит, мы можем указать на него любое количество имен веток.
Каждый коммит запоминает свои родительские или родительские хеш-идентификаторы, поэтому нам нужно запомнить только последний или tip коммит ветви - все более ранние из них можно найти, начиная с конца и до конца. работает в обратном направлении. Таким образом, имя ветви идентифицирует только tip commit.
Когда Git создает новый коммит, Git просто записывает хэш-идентификатор нового коммита в текущую ветку . Какая ветка является текущей? Ответ на этот вопрос одинаково прост: специальное имя HEAD
содержит название текущей ветви.
Важно убедиться, что любой полезный коммит Git доступен по какому-либо имени, потому что Git в конечном итоге соберет мусор любых недостижимых коммитов. То есть, если имя xyz
идентифицирует коммит a123456...
, этот коммит защищен от сборщика мусора. Так это то, что совершают родители (или родители), бабушки и дедушки и так далее. Git дает вам некоторое время (по умолчанию 14 дней) для подключения, чтобы объекты, включая коммиты, были защищены с помощью этой идеи достижимости: сначала вы создаете объект, такой как BLOB-объект, дерево или коммит, а затем обновляете любое имя ( у) должен был быть в состоянии найти объект и любое его происхождение. Окно 14 дней - это ваш льготный период для обновления имени после создания объекта (ов).