О ветвлении в двух словах

Для четкого понимания механизма ветвлений, необходимо вернуться назад и изучить то, как Git хранит данные.

Как вы можете помнить из раздела Введение, Git не хранит данные в виде последовательности изменений, он использует набор снимков (snapshot).

Когда вы фиксируете изменения, Git сохраняет коммит в виде объекта, который содержит указатель на снимок подготовленных данных. Этот объект так же содержит имя автора и email, сообщение и указатель на коммит или коммиты, непосредственно предшествующие данному (его родителей). У первоначального коммита родитель отсутствует, у обычного коммита есть один родитель, и есть несколько родителей для результатов слияния веток.

Представьте себе каталог, который содержит дерево файлов. Вы подготавливаете их все вместе, а затем сохраняете в виде одного коммита. В процессе подготовки вычисляется контрольная сумма каждого файла (SHA-1 как мы узнали из Введение), хранящая версию файла в репозитории Git (Git ссылается на них). Затем эти контрольные суммы добавляются в область подготовленных файлов.

Когда вы фиксируете изменения, Git вычисляет контрольные суммы каждого подкаталога (в нашем случае только основной каталог проекта) и сохраняет эти объекты дерева в репозитории. Затем Git создает объект коммита с метаданными и указателем на основное дерево проекта для того, чтобы можно было воссоздать этот снимок в случае необходимости.

Ваш репозиторий Git теперь хранит пять объектов: блоб (blob) для содержимого каждого файла, содержимое каталога в виде дерева с указателями на блобы сохраненных фалов, сам коммит с указателем на основное дерево, метаданные коммита.

Если вы сделаете изменения и зафиксируете их, тогда следующий коммит сохранит указатель на коммит, предшествующий ему.

Ветка в Git'е это легко перемещаемый указатель на один из этих коммитов. Имя основной ветки в Git по умолчанию — master.

Когда вы фиксируете изменения, то получаете основную ветку, указывающую на ваш последний коммит. Каждый коммит автоматически двигает этот указатель вперед.

Примечание: Ветка master в Git'е это не специальная ветка. Она точно такая же, как и все остальные ветки. Она существует почти во всех репозиториях только лишь потому, что ее создает Git, а большинство людей не меняют ее название.