Перейти к основному содержанию
`Ctrl`+`K`

# Коммит

Коммит - это отдельное сохранение (снимок) состояния ваших файлов в определенный момент времени. Является фундаментальной единицей истории `Git`, которая сохраняет изменения и позволяет отслеживать эволюцию проекта.

## Правила наименования коммитов

Наименования постоянных коммитов являются фиксированными.

Общий формат коммита: `Label(Scope): Subject #issue [Issue-Number]`

`Label` - тип изменений в коммите:

- `feat` - реализация нового функционала.

- `fix` - исправление ошибок.

- `hotfix` - оперативное исправление критических ошибок.

- `test` - добавление тестов.

- `refactor` - рефакторинг кода без изменения функциональности.

- `docs` - обновление документации.

- `chore` - прочие изменения, не подпадающие под указанные категории.

`Scopes` - опциональная область, в которую вносят изменения (компонент, страница, модуль или пакет).

`Subject` - короткое описание изменений. Оно начинается с заглавной буквы и краткого страдательного причастия. Например: «Изменено», «Исправлены», «Указаны», «Реализован».

`Issue-Number` - номер задачи или документа поддержки, при наличии, либо `notask`.

Примеры названия коммита:

- `fix(rpl): Убрано поле "Источник" у входящих сообщений интеграции #issue 182831T`;

- `feat(btk): Указаны подробности в описании БО #issue 217081D`;

- `refactor(gtk, btk): Перенесена логика кэширования #issue notask`.

## Метаданные коммита

Каждый коммит содержит следующие метаданные:

- Уникальный хеш (SHA-1) - 40-символьный идентификатор, вычисляемый на основе содержимого коммита.

- Автор - пользователь, создавший изменения в файлах.

- Коммитер (Автор фиксации коммита) - пользователь, зафиксировавший изменения в репозитории.

- Дата создания - временная метка фиксации.

- Сообщение коммита - описание внесённых изменений.

- Ссылки на родительские коммиты - указатели на непосредственных предков в истории (есть у всех коммитов, кроме первого).

## Основные свойства

### 1. Неизменяемость

После создания, коммит не может быть изменён. Любая модификация приводит к созданию нового коммита с уникальным хешем. Это обеспечивает целостность и достоверность истории проекта.

### 2. Атомарность

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

### 3. Ссылочная целостность

Каждый коммит (кроме начального) ссылается на один или несколько родительских коммитов, формируя граф.

## Коммит и ветвление

История Git представляет собой направленный ациклический граф, где коммиты являются узлами, а связи между ними - рёбрами, указывающими на предков.

На изображении выше отображена типичная структура коммитов с демонстрацией их взаимосвязей и ключевых атрибутов.