Boas práticas

Commits atômicos

Commite alterações não relacionadas separadamente, para que cada commit seja uma unidade lógica de trabalho. Essa abordagem facilita entender o histórico de alterações e revertê-las se for preciso.

Um commit é atômico quando não dá mais para dividi-lo.

Ruim
1a2b3c
Alex Shvets
2025-04-20 10:00
Adicionada funcionalidade de cupons (e corrigidos links nos templates de notificação por email) (ah, e refatorado o agendador de emails).
+ Store/Coupons.js
+ styles/coupons.css
M Core/Scheduler/emails.js
M Emails/layout.tpl
Bom
1a2b3c
Alex Shvets
2025-04-20 10:00
Adicionada funcionalidade de cupons.
+ Store/Coupons.js
+ styles/coupons.css
9f5110
Alex Shvets
2025-04-20 11:00
Corrigidos links nos templates de notificação por email.
M Emails/layout.tpl
bbc129
Alex Shvets
2025-04-20 11:15
Refatorado o agendador de emails.
M Core/Scheduler/emails.js

Vantagens

  • Mais fácil de entender: Commits atômicos focam em uma única alteração lógica, o que facilita para outras pessoas (e para o seu eu do futuro) entender o propósito e o impacto de cada commit.
  • Depuração simplificada: Quando um bug aparece, commits atômicos facilitam localizar o commit exato que causou o problema, já que cada commit é uma alteração autocontida.
  • Colaboração melhor: Commits atômicos facilitam que colegas de equipe revisem alterações específicas e deem feedback sobre elas, já que cada commit foca em uma única tarefa ou correção.
  • Histórico mais limpo: Mantendo os commits atômicos, o histórico do projeto fica limpo e organizado, o que facilita navegar e entender a evolução da sua base de código.
  • Reversões mais fáceis: Se uma alteração específica precisar ser revertida, commits atômicos permitem fazer isso sem afetar outras alterações não relacionadas, minimizando o risco de introduzir novos problemas.
  • Cherry-picks mais fáceis: Commits atômicos facilitam dar cherry-pick em alterações específicas entre branches, já que cada commit representa uma unidade de trabalho autocontida.

Armadilhas

Commits atômicos podem sair pela culatra de algumas formas se usados em excesso:

  • Granularidade excessiva: Quebrar demais as alterações pode gerar uma quantidade enorme de commits minúsculos, difíceis de acompanhar e de entender.
  • Perda de contexto: Ao focar em alterações pequenas e isoladas, a visão geral e o contexto da feature ou correção como um todo podem se perder.
  • Mais trabalho extra: Fazer muitos commits pequenos exige mais tempo commitando, dando push e, possivelmente, abrindo vários pull requests.
  • Dificuldade para reverter: Se uma feature exige vários commits atômicos e for preciso voltar atrás, pode ser mais difícil reverter tudo de forma limpa.
  • Legibilidade reduzida: A história completa de uma alteração pode ficar espalhada por muitos commits, o que dificulta que outros desenvolvedores a entendam lendo o histórico.

O segredo é encontrar o equilíbrio — mantenha os commits focados e digeríveis, mas não tão granulares que percam o sentido e fiquem difíceis de gerenciar. O objetivo são commits lógicos e autocontidos.