Коммиты

Полезные статьи:

chris.beams.io/posts/git-commit;
freshconsulting.com/atomic-commits.

Пулл с ветки

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

        
            $ git add .
            $ git commit --no-edit
            Merge branch 'develop' into feature/british-cats-Ticket-295
        
      

Соблюдая этот стандарт, команде будет проще с историей отдельных веток:

• в отладке,
• при неправильно решенных конфликтах.

Коммит на слияние

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

        
          $ git log --oneline
          4336d35 Create cats interface
          7bc2ba9 Implement Persian cat realization
          5f330fd Add Persian cat documentation
          ...
        
      

Когда приходит время внести эти изменения в дефолтную ветку, это делается одним большим коммитом с заголовком и комплексным описанием, что было сделано и почему. Правильная практика слияния изменений — использовать веб-интерфейс систем хранения исходного кода как Github и Gitlab.

        
          $ git log --oneline
          d2ccf1a Ticket-299: Prevent cats graph be stopped unexpectedly (#301)
          82a921a Ticket-295: Add base cat interface and british cat realization (#293)
          ...
        
      

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

        
          Ticket-299: Prevent cats graph be stopped unexpectedly
          
          There was a situation when cats graph is stopped unexpectedly without
          any verbose information and traceback. The socket connection between 
          two web-servers (back-end and front-end) was successfully debugged
          and founded the socket library's async latent behavior.

          Implemented:

            — Create handler for async socket connection as sync. The consumer doesn't 
            specify a condition for ending the while loop and stream, so the application 
            checker in Daphne cleans up the task if the protocol disconnects and the app 
            doesn't handle it. So `channel_layer` is wrapped to `async_to_sync`.  

            — Fix low latency between pushing the cats graph data and its output on the
          user interface. There was a high coupling between interface class that proxy
          via a few client to the realization. The separated cats graph message class 
          was created.

          References:
            • Socket channel layers — https://channels.docs.io/channel_layers.html
            • Daphne's handle_reply() — https://git.io/fgVzK

          Issue: #56
        
      

Следуйте следующим правилам при составлении коммитов на слияние:

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