Иногда системы контроля версий напоминают групповые чаты: вроде бы все тут собрались по какому-то поводу и пишут о чём-то одном, но что именно пишут ― разобраться порой просто невозможно. Как и в чате, где на одно грамотное и полное сообщение наберётся сотня «гыгы, лол» и «))))))», в Git-коммитах на несколько внятных описаний приходится втрое больше чего-то такого:

c63b59c ЛОГИКА РАБОТЫ File[] filesList; (ВНИМАНИЕ!)

3775079 Правки самые последние NEW

71acc53 Правка последняя

Особенно это становится заметно во времена крупных доработок. Когда у разработчика много задач и горящих дедлайнов, есть соблазн плюнуть на написание нормальных комментариев к коммитам (commit messages) и применить золотое антиправило экономии времени «Разберусь потом». Но когда наступает это «потом», комментарии типа «03.03 – 04.03» или «последняя правка» не дают ничего, кроме чувства досады на себя в прошлом.

В этой статье мы решили напомнить про правила хорошего тона при написании комментариев к коммитам, чтобы позаботиться о себе и своих коллегах.

Напрасная трата времени. Или нет?

Если какая-то фича не работает, самое время проверить, какие изменения выкатили за время её разработки. Всегда хочется чётко понимать, что добавили или убрали, чтобы быстро вернуть к жизни своё творение. Но если вы работаете в большом проекте, то можете даже ни разу не увидеть всех его участников, не говоря уже о том, чтобы спрашивать у них: «А какое изменение ты делал вот тут, Сергей?»

Вы заходите в лог Git и видите следующие коммиты с комментариями:

a0c03f0 СОГЛАСНО док.1

63d7fa2 >еЛиЗаВеТа<

41f9213 2.03-7.03

82318b8 Что-то ЗАГЛЮЧИЛО-исправлено.

56fa988 Правки от Васи

d80e8bc 1.03, внесли вправки

fe70e42 fg.dfdbd - исправлен

Что за «Док.1»? Что делали со второго по седьмое число? Кто такие Вася и Елизавета? Остаётся закатить глаза, как Роберт Дауни-младший в меме, и идти перекапывать все детальные описания и задачи в таск-трекере.

Но в репозитории можно увидеть и другое:

027b50f Сделать отправку состояния с помощью JSON

f885497 Добавить сохранение состояния системы в строку "System"

de542e3 Исправить ошибку с освобождением ресурсов (добавить namesReader.close())

ed3c53f Добавить дополнительный цикл прохода по списку filesList

0047514 Устранить ошибку загрузки из базы данных

b9539fd Изменить логику работы Reader1

Эти комментарии однородные и понятные. Возможно, некоторым из них не хватает детализации, но на уточнение уйдёт буквально пара минут, потому что по описанию уже ясно, где и что искать, а дополнительные пояснения могут находиться в commit body.

Корректный комментарий к коммиту ― это один из способов эффективной коммуникации в команде, которая зачастую является главным пожирателем времени. Даже две полуторачасовые встречи могут отправить разработчика в интеллектуальный нокаут на полдня. А к ним нередко добавляется ситуативное общение по задачам, общение с новичками и тимлидом, специалистами из других отделов. Если при этом приходится по несколько часов в неделю разбираться с непонятными коммитами, вместо сотрудника скоро останутся тлеющие головешки. Написать хороший комментарий ― это способ сэкономить время и себе, и коллегам, позаботиться о них, помочь не нервничать, не выгорать или хотя бы выгорать медленнее.

Если это звучит очевидно, то странно, почему в репозиториях до сих пор часто творится неразбериха. Есть 3 очевидных объяснения:

  • новички не знают правил;

  • нет времени писать правильно из-за большой загрузки;

  • разработчики не хотят соблюдать правила.

В итоге комментарии становятся не помощью, а никому не нужной обязанностью. Из-за того, что они непонятные, ими не пользуются. А чем меньше ими пользуются, тем ниже мотивация что-то менять. Замкнутый круг.

Но в среде разработки гласные или негласные правила есть для всего. Придерживаться одной договорённости проще, чем разбираться с последствиями того, что каждый делает по-своему. Будет лучше, если команда договорится о правилах, касающихся следующих аспектов:

  • содержания комментария ― указывать ли тип, по какой структуре строятся описания в каждой из ситуаций (например, составлять заголовки по логике «Добавить (что) (куда)» или «Изменить (что) на (что)»), какие слова при этом использовать, в какой форме;

  • стиля комментария ― как употреблять строчные и прописные буквы, делать ли отступы и переносы, какие знаки препинания можно использовать и т. д.;

  • метаданных ― как ссылаться на ID задач, указывать ли номер тикета Jira и т. д.

У нас есть свои правила составления описаний для коммитов, однако они не являются чем-то уникальным и секретным. Они коррелируются с тем, о чём рассказывает Крис Бимс в своей статье и на GIT Hub и чего так или иначе придерживаются тысячи разработчиков по всему миру. Расскажем о них подробнее и с примерами.

8 правил описаний для коммитов

Правило 1: добавлять ID задачи

Распространённая практика ― добавление ID задачи в Jira или другом трекере задач перед описанием. Это нужно, чтобы быстро перейти к контексту изменения и узнать его детали. Или, наоборот, для того, чтобы быстро найти в Git изменения, относящиеся к конкретной задаче.

Правило 2: писать заголовки до 50 символов

Заголовок ― это очень краткое описание всех изменений, которое первым видит разработчик в инструменте контроля версий. Его оптимальная длина ― до 50 символов. На практике он может быть и длиннее (GitHub оповещает, что объём фразы больше, но разрешает её продолжить). Сокращение заголовка действительно полезно со следующих точек зрения:

  • именно такой формат проще всего воспринимается при беглом изучении репозитория, позволяет быстро понять суть изменений;

  • заставляет авторов как можно чётче формулировать свои мысли. В первое время это может раздражать, но через пару недель краткие и ёмкие формулировки начинают будто сами рождаться в мыслях, мы проверяли.

Заголовок должен быть не только коротким, но и самодостаточным. То есть по возможности содержать фактическую информацию об изменении. Например, можно написать «Создать Python3-правило сборки status.py», и это будет нести исчерпывающий смысл. Но если написать «Создать новое правило сборки», коллеги, скорее всего, просто не станут разбираться и забьют.

Соблазн написать длинный заголовок возникает тогда, когда вы фиксируете сразу много изменений. На этот случай придумали понятие «атомарные коммиты». Это принцип, по которому фиксировать следует каждое частное завершённое изменение отдельно. Это работает, даже когда вы уже ранее закоммитили «пакет» из нескольких доработок. Если в него требуется внести изменения, лучше создать для каждого из них отдельный коммит. Если что-то будет работать не так, не придётся снова откатывать весь «пакет», достаточно будет откатить, например, только последующую корректировку цвета.

Кроме того, лучше отказаться от принципа фиксации версии только в какое-то определённое время (например, в конце рабочего дня). У каждого коммита должна быть логика: конкретное завершённое изменение или несколько изменений. Также мы обычно фиксируем рефакторинг отдельно от изменений функций или от корректировки ошибок. Например, перемещение класса выполняется одним коммитом, а корректировка ошибки в классе ― другим. Так намного легче искать и понимать изменения.

Правило 3: делать отступ между заголовком и описанием

Заголовок не только сразу отражает суть изменений в репозитории. Он может использоваться и в других полезных процессах. Например, он может стать темой email при использовании команды git-format-patch. Далее лучше оставлять пустую строку, а ниже размещать более детальное описание, например, указать на причины изменений, если они важны для проекта.

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

Например, можно написать просто:

Метод Divider изменить на тип void

А дальше, чтобы получить подробную информацию о том, что именно исправили, любой желающий может воспользоваться командами:

  • git diff ― отображение изменённого файла в консоли с детализацией изменений;

  • git show ID ― отображение изменений конкретного коммита;

  • git log -p ― отображение всех коммитов от новых к старым с изменениями в файлах.

Если причины изменений критически важны для проекта и могут быть полезны другим разработчикам (например, влиять на дальнейшие действия в проекте), то их следует указать.

Например:

Метод Divider изменить на тип void

Так как класс employee после последних кадровых изменений стал однородным, он не требует разной обработки в зависимости от условий. Поэтому было убрано возвращаемое значение.

Детальное описание удобно выполнять в редакторе, однако его можно оставить и в строке выполнения команды, добавляя к git commit ключ -m.

Отделение заголовка от описания позволяет быстрее визуально ориентироваться в информации.

Вот пример полной записи в журнале:

$ git log

commit facdd14e2a56e5efbba424b0941ac2501da26be8 (HEAD -> master)

Author: DanMiller <DanM@exitt.com>

Date: Tue Mar 15 22:30:16 2022 +0300

Метод Divider изменить на тип void

Так как класс employee после последних кадровых изменений стал однородным, он не требует разной обработки в зависимости от условий. Поэтому было убрано возвращаемое значение.

Если вывести только основную информацию о коммите с помощью команды git log --oneline, получим:

$ git log --oneline

facdd14 (HEAD -> master) Метод Divider изменить на тип void

Правило 4: писать заголовок с заглавной буквы

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

Пример:

f885497 Подключить к базе данных

b9539fd Устранить ошибку загрузки из базы данных

027b50f Сделать отправку состояния с помощью JSON

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

Правило 5: не ставить точку в конце заголовка описания

Знаки препинания в заголовке обычно не нужны, кроме случаев, когда они помогают раскрывать смысл. Например, заключение слова в скобки может быть необходимо для конкретизации предыдущих фраз в заголовке:

Исправить ошибку с освобождением ресурсов (добавлять namesReader.close())

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

Неправильно:

Загрузить начальную конфигурацию.

Правильно:

Загрузить начальную конфигурацию

В целом лишних знаков препинания лучше избегать, чтобы уложиться в минимальное количество символов.

Правило 6: использовать в заголовке глагол в форме инфинитива

В английском оригинале это правило звучит как «Используйте глагол в повелительном наклонении», но для русского языка оно не очень подходит. Повелительное наклонение в русском ― это слова типа напиши, сходи, принеси и т. д. В английском же повелительное наклонение ― это форма инфинитива без частицы to. Мы предполагаем, что в английском такую форму рекомендуют использовать просто для краткости, ведь слова в изъявительном наклонении там имеют окончания, которые увеличивают количество символов: fixed вместо fix, consolidating вместо consolidate и т. д.

Таким образом, для русскоязычных коммитов больше подходят глаголы в форме инфинитива. Они не сильно короче, чем глаголы в изъявительном наклонении или отглагольные существительные (типа загрузка, обработка и пр.), однако выглядят нейтрально, единообразно и прямо называют произведённое действие.

Заголовок должен быть похож на команду или инструкцию:

Оповестить slave-устройства

Загрузить начальную конфигурацию

Подписаться на топики

Обработать сырую базу значений

Исправить ошибку загрузки из БД

В изъявительном наклонении и с существительными это бы выглядело так:

Настроили оповещение slave-устройств

Загрузка начальной конфигурации

Подписка на топики

Обработка сырой базы значений

Исправили ошибку загрузки из БД

Выглядит разнородно и не очень удобно читается.

Чтобы запомнить это правило и не сбиваться, можно использовать следующий принцип. Заголовок должен логично с точки зрения смысла продолжать фразу «При применении коммит будет...». Вид глагола при этом может измениться.

Например:

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

 ... будет исправлять ошибку загрузки из БД

Конечно, если хочется пользоваться всеми возможностями богатого русского языка и писать в прошедшем времени (исправил, изменила, устранил и т. д.) или в повелительном наклонении (создайте, добавьте и т. д.), то вполне можно это делать. Главное ― договориться об этом с командой и делать единообразно.

В теле описания можно использовать любые слова и словоформы.

Правило 7: ограничивать длину строки в теле описания 72 символами

Тело описания коммита не переносится в GIT автоматически, это выглядит как убегающая далеко за пределы экрана вправо строка, которую неудобно читать.

https://dev.to/noelworden/improving-your-commit-message-with-the-50-72-rule-3g79
https://dev.to/noelworden/improving-your-commit-message-with-the-50-72-rule-3g79

Поэтому перенос лучше делать вручную, оставляя на строке 72 символа или менее. Это число неслучайно. Отраслевой стандарт удобочитаемости одной строки ― 80 символов. Однако Git добавляет отступ слева, чтобы описание коммита визуально выделялось, и этот отступ тоже представляет собой символы.

Правило 8: в теле описания должны быть ответы на вопросы: «Что?» и «Почему?»

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

В следующем примере разработчик не поленился объяснить, почему были произведены изменения и в чём конкретно они заключались:

commit facdd14e2a56e5efbba424b0941ac2501da26be8 (HEAD -> master)

Author: DanMiller <DanM@exitt.com>

Date: Tue Mar 15 22:30:16 2022 +0300

Ввести возможность подписки на систему топиков

Предыдущая версия прошивки не позволяла в полной мере работать с системой топиков из-за возникавших ошибок, поэтому было проделано следующее.

Так как библиотека PubSubClient.h хочет принимать на вход только массив символов (char), был проработан метод autoBuilder() для создания отдельных строк с названиями топиков, чтобы далее, при назначении переменных (#define), вызывать у этих строк функцию c_str() для перевода в массив символов.

Но не все герои носят плащи.

Есть ситуации, когда отвечать на вопрос «Что?» нерационально. Например, если код сложный, то описывать его в commit messages ― это как писать краткое содержание «Войны и мира» (долго, утомительно и бессмысленно). Можно разъяснить сложные моменты в комментариях к коду, а в описании к коммиту изложить, как всё работало до изменений и как стало после.

Итак, подведём итоги. Корректные и единообразные описания для коммитов важны с двух точек зрения:

  • их можно удобно и быстро найти и прочитать;

  • они дают максимально возможное количество информации об изменении с использованием минимального количества знаков.

И поскольку время ― один из самых ценных ресурсов в современном мире, его экономия для себя и своих коллег ― это отличный способ проявить заботу.

Для того чтобы описания были корректными, мы рекомендуем соблюдать восемь правил:

  1. добавлять ID задачи;

  2. писать короткие заголовки ― до 50 символов;

  3. делать отступ между заголовком и описанием;

  4. писать заголовок с заглавной буквы;

  5. не ставить точку в конце заголовка описания;

  6. использовать в заголовке глагол в форме инфинитива;

  7. ограничивать длину строки в теле описания 72 символами;

  8. в теле описания отвечать на вопросы: «Что сделали?» и «Почему сделали?»

Что вы думаете об этих правилах и как сами пишете описания?

Комментарии (23)


  1. GaDzik
    25.04.2022 12:06

    Ок. Прям так и буду делать)


  1. JustDont
    25.04.2022 12:14
    +4

    добавлять ID задачи;

    Мигрировали таск-трекер — ура, у вас в коммитах теперь куча абсолютно бесполезных символов.
    Настроить интеграцию между таск-трекером и вашим сервером реп (гитлабом, битбакетом, итд), и оставлять в пуллреквестах ссылки на задачи в таск-трекере — это полезное дело. Просто потому, что интеграция будет обозначена явно, и её затем так же явно можно смигрировать (при необходимости) на новое решение. Оставлять некие буковки в коммитах в надежде на то, что это поможет и не протухнет — это не интеграция.


    в теле описания отвечать на вопросы: «Что сделали?» и «Почему сделали?»

    Commit message не самое удобное место для пространных текстов. Их всегда лучше выносить в более удобную для них точку (пуллреквесты, таск-трекер, и т.д.). Я бы сказал, что ответу на вопрос "что сделали" в CM почти всегда стоит быть кратким, а ответ на вопрос "почему сделали" должен вообще появляться только в таких коммитах, которые могут выглядеть ошибочными (типа откатов, неочевидных слияний и переносов кода, и т.д.). В этом случае явно описанное "почему" помогает потом понять, что изменения были сделаны намеренно.


    Статья выглядит такой себе. Прежде чем выстраивать какие-то правила относительно CM, надо начать с предпосылки: история коммитов в VСS не является таск-трекером и логом ведения разработки. И не надо натягивать сову на глобус и использовать её для этого, для этого существуют другие системы. История коммитов — это очень простая штука, приписывающая каждому изменению кода конкретного автора и некие идентификационные сведения. CM — это человекочитаемый идентификатор изменений в коде. Только и всего.


    1. inkelyad
      25.04.2022 19:25

      Commit message не самое удобное место для пространных текстов. Их всегда лучше выносить в более удобную для них точку (пуллреквесты, таск-трекер, и т.д.).

      После минутного поиска в репозитарии ядра linux: https://github.com/torvalds/linux/commit/9becb688913023124464c5463b4389b3b293f0e7

      Вроде достаточно длинно. И неплохо помнить, что оригинально PR и был коммитом вместе со своим commit message - он почтой уходил тому, кто должен его замержить.


      1. JustDont
        25.04.2022 19:39

        У репозитория linux своя атмосфера, там CM используется в качестве писем принимающему пуллреквесты.
        То есть да, они так живут. Насколько это удобно — большой вопрос.


        1. inkelyad
          25.04.2022 20:30

          Я подозреваю, что разработка через списки рассылки может быть довольно удобна, хоть и непривычна почти всем.

          А уж с точки сохранения той самой старой истории разработки - так практически самый надежный вариант, как я понимаю. У них архивов этой самой переписки - за *-тцать лет есть. В случае чего делаешь полнотекстовый поиск по тем архивам и находишь, чего это мы тут наделали много лет назад. А не жалеешь, что оно умерло где-то в недрах очередной project management софтины, вендора которой уже не существует.


          1. JustDont
            25.04.2022 20:38

            Ну да, в этих условиях оно наверное неплохо.
            Но вот если глянуть на кровавый энтерпрайз, то там скорее наоборот всё. Project management-софтина живёт себе десятилетиями, а вот в репозиториях настолько же чехарда, как и собственно с проектами — образовался новый проект, и в его репозиторий тут же через ctrl+c/ctrl+v бахнули слегка видоизмененный (а то и не измененный) код проекта-предшественника, и поехали фигачить дальше. В этих условиях искать правды в коммитах вообще не приходится.


          1. sshikov
            25.04.2022 21:34

            >В случае чего делаешь полнотекстовый поиск по тем архивам
            Вы в гугле-то с гарантией не найдете ничего старше 10 лет. Чтобы найти — нужно помнить, какие там были ключевые слова, а это далеко не так очевидно. У нас в jira было порядка 4000 задач — разбили проект на три, сейчас в новом проекте за полтора года примерно 700, найти что-то, что не помнишь точно — уже не просто, проще просмотреть все 700 (хотя бы названий). И это проект где 3 (три) программиста.


            1. inkelyad
              25.04.2022 22:40

              Вот потому он и там такие простыни и пишут. Плюс Jira довольно плохо ищет, плюс туда, если специально этим не заморачиваться (все письма всех заинтересованных лиц в не копируем?), попадает далеко не весь контекст.

              У нас на небольшом таком почти легаси энтерпрайзе лет 8 возраста прямо по ней тоже достаточно плохо искалось. Постоянно приходилось в архивы переписки погружаться, чтобы понять, почему и для чего захотелось что-то сделать и чем это кончилось.


              1. sshikov
                26.04.2022 14:53

                Ну мы поэтому и ищем что-то осмысленное в jira, а не логах коммитов :)


    1. auddu_k
      25.04.2022 23:35
      +1

      Мигрировали таск-трекер — ура, у вас в коммитах теперь куча абсолютно бесполезных символов

      Хе, как-то пришлось из бекапа старый трекер поднимать, чтоб найти почему же там написана такая … такое … что-то совсем странное ☺️

      Нет, из всего это самый важный момент - все можно простить, но к трекеру привязаться нужно


  1. ArchimeD
    25.04.2022 14:05
    +6

    Добавлю. Используем правила semantic-release, ну и собственно сам https://github.com/semantic-release/semantic-release
    Что-то типа

    feat(JIRA-123): Implemented ...
    fix(JIRA-100500): Fixed ...

    Что позволяет еще и автоматически генерировать Version и Changelog


  1. qw1
    25.04.2022 15:53
    +6

    Насчёт правила 6, глагол в форме инфинитива, спорно.

    Как я понимаю, ноги у правила растут из проектов, куда поступает много PR, где сидит такой условный Линус, и решает, принять ли ему фичу «Оповестить slave-устройства», «Исправить ошибку загрузки из БД» или не принимать. В заголовке коммита — действие, которое применится к проекту при мерже.

    Но совсем другое дело во внутренней разработке. Там принятие коммита — дело решённое (свои коммиты никто не будет реджектить). Там при работе с логом коммитов имеем дело со свершившимся фактом: «Реализовано оповещение slave-устройства», «Исправлена ошибка загрузки из БД». И так читать и понимать намного проще, когда понятно, что в версии 1.x.x сделано то или это.

    ИМХО.


    1. ctacka
      25.04.2022 19:33
      +1

      Согласен. На практике часто регламентируют действие в зависимости от типа коммита, чтоб можно было легко автоматичкски сделать change log или release notes (см. комментарий выше).
      Например так: Добавлено …, Исправлено …, Изменено …., Удалено …


    1. ggo
      26.04.2022 09:27

      Нет, это правило следует из английского языка.
      Для русского — можно не следовать, т.к. выигрыша между Добавить и Добавлено почти нет


  1. edo1h
    25.04.2022 19:31
    +2

    https://habr.com/ru/post/416887/
    уверен, если поискать, ещё статьи с теми же советами найдутся


  1. rezdm
    25.04.2022 21:12

    Я в своих проектах прошу просто копировать загаловок таски из таск-трекинга (Jira, Youtrack -- неважно). Выглядит, +- лапоть

    {аббревиатура проекта/модуля/...}-{номер таски} {одно предложение описания}

    e.g. GD-007 Send e-mails with list of files and links to folders

    Многие системы умеют к подобным каментам цеплять билды, таск-треки, код-ревью, прочая, прочая, прочая. Опять же, многие системы позволяют копи-пастить этот текст, чтобы не перенабивать его. Его же легко гененировать при автоматизации некоторых процессов.

    Опять же, все обсуждения проблем, документация, прочая -- выносится в таск-тракинг и в документацию, а не в коммит мессаджи (ядро линуха выводим из обсуждения).

    Опять же, в зависимости от системы бранчевания, можно настроить соответствующим образом мёрджи. И, скажем, feature branch будут мёрждится с нужным каментом.

    Много, что можно и как сделать. Главное -- команде договориться и следовать этому принципу.


  1. sshikov
    25.04.2022 21:27
    +2

    0047514 Устранить ошибку загрузки из базы данных

    Эти комментарии однородные и понятные.

    Это автору так кажется. Они понятные, пока у вас одна ошибка загрузки из базы данных была в проекте. Как только их будет примерно две, они перестанут для вас выглядеть как одинаковые, и такой текст ничего вам не скажет. Даже завтра. А уж что будет через год — вообще сложно представить.


  1. denizen
    26.04.2022 09:24
    +5

    Правило номер ноль: использовать для коммитов только английский язык.


    1. starkeen
      27.04.2022 10:00

      хорошо бы раскрыть мысль, почему нужно использовать английский язык, а не какой-то другой? кажется, это требует знания английского от разработчиков в достаточно приличном качестве, иначе будет мгимо финишд


    1. SadOcean
      27.04.2022 12:06

      Я одновременно согласен и не согласен
      Зависит от
      В целом это хороший тон, но мне встречались ситуации, когда большая часть команды, работающей с репозиторием не владеют им достаточно (геймдизайнеры в игровом проекте)
      В этом случае оказалось разумным описывать комментарии на русском


  1. ggo
    26.04.2022 09:29

    Зря напали на автора.
    Это общемировые рекомендации повторенные много раз.
    Например


    1. sshikov
      26.04.2022 14:55
      +1

      А вы считаете что если широко известные всем рекомендации повторить еще много раз - они станут лучше что-ли? На автора напали в общем именно за то, что ничего нового тут нет. Ничего особо плохого впрочем тоже. Если соблюдать эти правила - хуже не будет (но свое время вы потратите зря).


  1. CAELESTISO
    26.04.2022 09:46

    У нас в компании свой подход к организации коммитов. Для каждой полноценной задачи мы создаём от HEAD новую ветку с названием, включающим код задачи и его краткое название. Например, T4C-401__order-creation. Откуда T4C - название проекта, 401 - код задачи, __ - просто разделитель, а order-creation - краткое описание задачи. Так проще ориентироваться по веткам. Коммиты делаются не по завершению рабочего дня, а по завершении задачи. Именуются коммиты таким образом:

    fix: Невозможность закрыть модалку GetPrice

    upd: Обновлен React до версии 18

    ref: Переписан легаси код в <название файла>

    Страница списка товаров (Либо "Добавлена страница списка товаров")

    В начале названия коммита один из префиксов:

    fix - фикс ошибки, ref - рефактор, реорганизация кода, upd - поднятие (обновление) пакетов. Если префикса нет, значит, было просто добавление нового функционала. В описании комита пишется либо пояснение к текущей задаче, либо какие-то дополнительные мелкие правки, которые были сделаны в ходе работы.

    Такой подход лично нам достаточно неплохо упрощает навигацию по репозиторию проекта