Git Branches и HEAD: Простое объяснение веток

Что такое ветка в 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 будет в следующей лекции.

Что будем искать? Например,программа