Ответ
Все три понятия являются ключевыми для управления историей изменений в Git, но служат разным целям.
Commit (Коммит)
Это атомарная операция, которая фиксирует снимок (snapshot) состояния всех отслеживаемых файлов в репозитории на конкретный момент времени. Каждый коммит имеет:
- Уникальный идентификатор (хэш SHA-1, например,
a1b2c3d
). - Ссылку на родительский коммит (или несколько, в случае слияния).
- Информацию об авторе и времени создания.
- Сообщение, описывающее сделанные изменения.
Branch (Ветка)
Это подвижный указатель на один из коммитов. Ветка используется для ведения параллельной разработки, изоляции новых функций или исправлений.
- Когда вы создаете новый коммит, находясь в ветке, указатель этой ветки автоматически сдвигается на новый коммит.
- Основная ветка по умолчанию называется
main
илиmaster
.
# Создать новую ветку и переключиться на нее
git checkout -b feature-x
Tag (Тег)
Это статичный (неподвижный) указатель на конкретный коммит. Теги чаще всего используются для маркировки релизов и важных точек в истории проекта (например, v1.0.0
, v2.1.5
).
- Легковесный тег: Просто именованная ссылка на коммит.
- Аннотированный тег: Полноценный объект в базе данных Git, содержащий имя автора, дату, сообщение и опционально GPG-подпись. Является рекомендуемым для релизов.
# Создать аннотированный тег
git tag -a v1.0.0 -m "Release version 1.0.0"
Ключевое отличие в виде аналогии:
- Коммиты — это страницы в книге вашей истории.
- Ветка — это закладка, которую вы перемещаете на новую страницу по мере чтения (разработки).
- Тег — это перманентная наклейка на особо важной странице (релизе), которая остается на месте.