О ветвлении в двух словах
Для четкого понимания механизма ветвлений, необходимо вернуться назад и изучить то, как Git хранит данные.
Как вы можете помнить из раздела Введение, Git не хранит данные в виде последовательности изменений, он использует набор снимков (snapshot).
Когда вы фиксируете изменения, Git сохраняет коммит в виде объекта, который содержит указатель на снимок подготовленных данных. Этот объект так же содержит имя автора и email, сообщение и указатель на коммит или коммиты, непосредственно предшествующие данному (его родителей). У первоначального коммита родитель отсутствует, у обычного коммита есть один родитель, и есть несколько родителей для результатов слияния веток.
Представьте себе каталог, который содержит дерево файлов. Вы подготавливаете их все вместе, а затем сохраняете в виде одного коммита. В процессе подготовки вычисляется контрольная сумма каждого файла (SHA-1 как мы узнали из Введение), хранящая версию файла в репозитории Git (Git ссылается на них). Затем эти контрольные суммы добавляются в область подготовленных файлов.
Когда вы фиксируете изменения, Git вычисляет контрольные суммы каждого подкаталога (в нашем случае только основной каталог проекта) и сохраняет эти объекты дерева в репозитории. Затем Git создает объект коммита с метаданными и указателем на основное дерево проекта для того, чтобы можно было воссоздать этот снимок в случае необходимости.
Ваш репозиторий Git теперь хранит пять объектов: блоб (blob) для содержимого каждого файла, содержимое каталога в виде дерева с указателями на блобы сохраненных фалов, сам коммит с указателем на основное дерево, метаданные коммита.
Если вы сделаете изменения и зафиксируете их, тогда следующий коммит сохранит указатель на коммит, предшествующий ему.
Ветка в Git'е это легко перемещаемый указатель на один из этих коммитов. Имя основной ветки в Git по умолчанию — master.
Когда вы фиксируете изменения, то получаете основную ветку, указывающую на ваш последний коммит. Каждый коммит автоматически двигает этот указатель вперед.