Что такое ветка в Git?
Ветка — это текстовая ссылка на определённый коммит. Ключевые моменты:
- Ветка по умолчанию — master.
- Репозиторий может содержать множество веток, между которыми можно переключаться.
- Одновременно активна только одна ветка. По умолчанию это master.
- Указатели на ветки хранятся в папке .git/refs/heads/. Каждый файл в этой папке соответствует ветке и содержит её хеш.
- Текущая ветка отслеживает новые коммиты. Например, если текущая ветка — master, и вы совершаете коммиты, а затем переключаетесь на new_branch и делаете там коммиты, то после возвращения на master коммиты из new_branch не отобразятся. Текущая ветка отслеживает только свои коммиты. Существуют операции слияния (merge) и перебазирования (rebase) для объединения веток.
- Указатель ветки автоматически перемещается после каждого нового коммита, само имя ветки не меняется. Git создаёт новый коммит с SHA-1 хешем, и указатель ветки обновляется.
- Для переключения между ветками используется команда git checkout <имя_ветки>.
Примеры имён веток:
- master (ветка по умолчанию)
- new_dos_branch
- project-name-12345 (используется в больших компаниях: число — номер тикета, префикс — проект или микросервис)
Имя ветки не может содержать пробелов. При попытке создать ветку с пробелами, они будут заменены дефисами.
Ветка как указатель на коммит
Если в ветке master два коммита, master указывает на последний из них.
Проверить это можно, посмотрев содержимое файла .git/refs/heads/master. Он содержит SHA-1 хеш последнего коммита. Этот хеш уникален для каждого пользователя и репозитория, но всегда соответствует последнему коммиту в ветке.
Таким образом, ветка — это текстовая ссылка на определённый коммит. Создание веток позволяет создавать ссылки на разные коммиты и легко переключаться между ними.
Git HEAD
HEAD (виден в выводе git log) — это указатель на текущую ветку. Подробное обсуждение HEAD будет в следующей лекции.