05 git - xzima/gradle-semantic-release-example GitHub Wiki
Как должна выглядеть работа с git?
Инициализация repo
- создать commit
feat: init repo
в ветке master - создать ветку develop из ветки master
Способы слияния веток
Squash
Ветки feature и hotfix в процессе наполнения commit-ами могут стать "толстыми" -- содержат много коммитов, что делает историю НЕ чистой и НЕ краткой.
Пример:
feat: add new feture
fix: something I forgot to do
fix: and again
chore: adopt review changes
chore: adopt review changes 2
chore: final commit, I promise
В этом случае нет необходимости видеть эти commit-ы в develop. Squash позволяет объединить все ваши commit-ы в один.
Rebase
Можно перебазировать commit-ы из feature (or fix) branch в develop, если ВСЕ они являются самоописательными (имеют осмысленный комментарий commit-а и отвечают за свое назначение).
Merge
Merge позволяет объединить ветки посредством создания commit-а в котором пересекаются объединяемые ветки.
Merge допускается использовать при слиянии с 'бессмертными' ветками. Merge недопустим при объединении feature и hotfix с 'бессмертными' ветками. Это оправдано тем чтобы история git была чистой и без коммитов слияния.
Правила формирования сообщений коммитов
Для оформления сообщений коммитов было принято решение использовать нотацию conventional commits.
Данная нотация позволяет:
- на основе сообщения commit-а:
- понять какого рода изменения были внесены
- получить краткое и полное описание изменений
- связать задачи, PR или другие элементы с commit-ом
- организовать автоматическое версионирование
Используемые средства автоматизации
Для автоматизированной проверки сообщений коммитов на соответствие нотации conventional commits используются следующие инструменты:
- husky - поваляет привязать проверки к git hooks
- commitlint - позволяет проверять сообщения на соответствие conventional commits
- commitlint-github-action - позволяет проверять сообщения коммитов со стороны ci/cd
- [jetbrains] Conventional Commit - плагин для JetBrains IDE, который позволяет упростить написание и проверку сообщений коммитов на соответствие conventional commits