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

Источники