Antes e depois das minhas mensagens de commit

Ingrid Mendes
Code Like A Girl
Published in
8 min readApr 13, 2018

--

Já queria produzir esse conteúdo há algum tempo, mas depois de dar um git log em alguns projetos meus antigos eu tomei um baita susto.

<eu sendo reclamona e polêmica no Twitter: “Eu só acho engraçado que ensinam a gente a usar VCS nos 45 do segundo tempo, sendo que nem te ensinam a commitar direito”. Obs.: o primeiro “ensinam” deveria ter sido entre aspas.>

Nesse texto pretendo descrever dificuldades, motivações e dicas que me ajudaram a melhorar absurdamente minhas mensagens de commit. Ah, e é claro, vou mostrar minha evolução com exemplos — porque humilhação pública nunca é demais haha.

<texto da imagem: “In case of fire 1. git commit 2. git push 3. leave building”, fonte da imagem: https://neoteric.eu/wp-content/uploads/2016/04/in_case_of_fire.png>

Como não vou falar tanto sobre convenções, recomendo de antemão esse material:

Imagine que as contribuições de código enviadas em um commit são uma foto que o Sistema de Controle de Versão tira dos seus arquivos naquele momento. Sendo assim, podemos considerar a mensagem como sendo a legenda da foto.

Mas mais do que isso, tome a mensagem como algo intrínseco ao seu trabalho, leve alguns minutos para escrever melhor e isso trará clareza e propósito às suas contribuições.

O que me atrapalha a escrever boas mensagens de commit

Vejam que eu escrevi “atrapalha” no presente.

Mesmo depois de consciente, acho que é mal de Dev se deixar levar por uma ou mais dessas questões:

  • pressa para subir a alteração

Ahhh mas a release tem que sair agora.

Quem nunca?

  • preguiça

Às vezes você pode pensar que está escrevendo algo trivial/redundante, afinal “todo mundo sabe o motivo pelo qual eu estou fazendo tal alteração” (e talvez todo mundo saiba mesmo, naquele momento). Pense sempre na atemporalidade da coisa. Talvez daqui a um mês você nem lembre mais o contexto daquele código.

Obs.: se está trivial a ponto de você explicar o que foi feito — aí temos um problema. Falarei disso mais na frente.

  • falta de atomicidade

Criar commits salvadores da pátria/que fazem mil coisas atrapalha muito na hora de descrevê-los. Eu sei que às vezes, no âmbito de uma feature branch, por exemplo, você vai ter vários commits, e às vezes você já fez várias coisas sem commitar, e tem arquivo com modificação em enredos diferentes e etc… mas aí é aprender a usar o Git a seu favor (tem algumas magias aqui).

  • imperícia (me lembrei das aulas da autoescola)

Eu realmente não sabia o quanto era importante escrever de uma forma mais adequada.

  • imprudência

Aqui é quando você já sabe que é importante mas se deixa levar por um dos três primeiros motivos.

Ah mas eu trabalho só.

Escreva boas mensagens de commit.

Ah mas é só um teste para uma vaga.

Escreva boas mensagens de commit.

E pra justificar toda essa minha insistência…

Motivos para melhorar suas mensagens de commit

Gente, esses e outros motivos estão aos montes pela internet — só listei os que mais me chamam a atenção.

Como eu mesma levei muito tempo para entender de fato isso, vamos refletir com calma.

  • traz mais contexto pra quem revisa o código

Revisão já é um troço trabalhoso. Vamos nos ajudar?

  • te auxilia na hora de lembrar no que foi trabalhado

Tanto no âmbito de uma release, como quando como você consulta códigos legados ou apenas antigos projetos seus, por exemplo.

  • passa organização e cuidado

Você não vai querer que o time, seu eu do futuro, ou pessoas que irão te avaliar pensem que você tem desmazelo com o código.

Exemplos reais

Escolhi alguns commits meus de cerca de 6 meses a 3 anos atrás, e descrevi como eu os escreveria hoje. Segue o resultado.

<texto do gif: “PORQUE AQUI É PROFISSIONAL”, ao fundo personagem do Choque de Cultura, fonte do gif: https://goo.gl/Pchj33>

Vamos lá!

Antes

<texto da imagem: “Retira layout específico para usuário x na tela z” “Layout retirado por decisão dos designers, pois agora tal outra informação é exibida no lugar.”>

Existia um determinado tipo de usuário que não iria mais ver um determinado layout. Esse layout só era exibido pra esse tipo de usuário, ou seja, esse código foi removido nesse commit.

Depois

<texto da imagem: “Retira layout de usuário x” “Na tela z, o layout de usuário do tipo x não será mais exibido por decisão dos designers, pois agora tal outra informação é exibida no lugar. Zeplin-Url:<insira_a_url_aqui>”>

O antigo título me parece muito grande (no lugar de x e z existiam outras palavras). Eu escreveria de uma forma mais sucinta e explicaria com mais detalhes no corpo, talvez acrescentando alguma url de apoio.

Antes

<texto da imagem: “Adiciona flag de ativação da funcionalidade x e y”>

Nesse commit, eu verificava uma flag vinda de uma requisição, e dependendo do valor dela eu exibia ou não a funcionalidade x, e exatamente o mesmo foi feito para a funcionalidade y. Obs.: a tal requisição já estava sendo feita antes, eu só pegava esse valor novo.

Depois

<texto da imagem: “Adiciona verificação para exibir x”>

Primeiro ponto, hoje eu faria dois commits: um para exibir a funcionalidade x, caso o valor da flag permitisse, e o outro para fazer o mesmo para a funcionalidade y.

Segundo, acho que “flag de ativação”, além de usar um linguajar de desenvolvimento, soou estranho para o que realmente estava sendo submetido. Afinal, a funcionalidade estava ativada, ela só não estava sendo apresentada.

Antes

<texto da imagem: “Substitui dialog da feature x por tela da feature x” “Mudança foi feita para atender a nova UI. Regras de negócio foram mantidas.”>

Não precisei ver os arquivos modificados pra entender do que se tratava a alteração, isso já foi um avanço. Basicamente, uma ação que era feita através de um dialog, passou a ser feita através de uma tela, em uma aplicação móvel.

Depois

<texto da imagem: “Cria tela para feature x” “Conforme a nova UI, o antigo dialog para x não existe mais e foi substituído por uma tela com o mesmo comportamento. Regras y, z e h foram preservadas. Zeplin-Url:<insira_a_url_aqui>”>

Hoje, talvez eu reescrevesse em dois commits. Um para retirar o código do dialog, e o outro para escrever a tela nova. Veja bem, no corpo do commit eu não preciso escrever coisas como “Remove código do dialog de x”, pois isso é autoexplicativo no código, mas essa frase poderia fazer sentido no título de um commit, por exemplo.

Sendo bem sincera? “Regras de negócio foram mantidas” não me diz muita coisa. Que regras são essas? Também adicionaria o link para a UI desenhada.

Antes

Resolvi ir mais a fundo e pegar commits de trabalhos da faculdade.

<texto da imagem: Author: Ingrid do Nascimento Mendes Date: Thu Jun 2 2016 “configuracoes de administrador”>

Esse foi um commit em que eu criei 8 arquivos, entre páginas HTML e estilos em CSS usando SASS, para um perfil de administrador de 4 entidades do sistema. Eu precisei dar um git show no commit pra entender o que eu tinha feito, pois só com o commit ficaria impossível deduzir.

Não sei traduzir em palavras o que estou sentindo agora. Eu pensava que commit era igual escrever código, no sentido de não usar til e acentos. Não começava o título com letra maiúscula. Nunca escrevia commits com corpo. Não sabia enviar com uma atomicidade que fizesse sentido.

Depois

<texto da imagem: “Cria telas para administrar x”, onde x seria uma entidade do sistema. “Hoje, não existe uma interface para gerenciar x. Com essa modifi-
cação, concedemos ao administrador a possibilidade de inserir/edi-
tar/excluir x. Zeplin-Url: <insira_a_url_aqui>”.

Provavelmente eu quebraria esse commit em 4, um para cada entidade envolvida. Adicionaria links com os arquivos de design desenhados no corpo, e uma descrição explicando como a alteração agrega ao contexto e quaisquer possíveis limitações (como porque tomei alguma decisão ou explicando que ainda estava faltando tal interação por conta de alguma conversa entre o time e etc).

Antes

<texto da imagem: Author: Ingrid do Nascimento Mendes Date: Sun May 10 2015 “Minha primeira página”>

Esse foi meu primeiro envio da vida. Foi na matéria de Programação Web na faculdade. Acredito que o professor pediu que escrevêssemos dessa forma, então talvez não faça tanto sentido ilustrá-lo aqui. Mas mesmo assim achei válido por demonstrar as mudanças na minha visão e uso de um VCS. Lembro de ter achado fantástico esse negócio e me senti a hacker por ter criado um repositório e feito um envio. Cada envio era um exercício que o professor avaliava (acho que ele não avaliava a mensagem, só os arquivos). Esse commit em específico era um HTML simples com alguns títulos, links, tabelas e inputs.

Depois

<texto da imagem: “Cria html simples” “Exercício para demonstração dos recursos de HTML ensinados. Url-do-Exercício:<sitedoprofessor/exercicio.pdf>>

Acho que a essa altura você já deve ter entendido meu modelo mental pra escrever commits. A questão é praticar.

Compilado de segredos

Seguem algumas características que ajudam a melhorar as mensagens, ressaltando desde já que não acredito em nada escrito em pedra — a definição do time é maior do que qualquer convenção da literatura.

  • adote um padrão

Por exemplo, se você/o time escreve as mensagens em inglês, acho válido manter dessa forma (a não ser que por algum motivo vocês decidam adotar o português posteriormente). Pode passar desorganização escrever alguns commits em inglês e outros em português.

Outro exemplo é o seguinte: existe uma convenção que nos diz para escrever o título usando o verbo no modo imperativo, como se fosse uma ordem. Eu, particularmente, gosto muito de escrever dessa forma, mas já vi gente que escreve no infinitivo, sem flexão de modo, e acho que está tudo bem. Nem tudo precisa ser seguido a risca. Apenas procure manter um padrão dentro do projeto.

  • é principalmente sobre a motivação, e não sobre o que foi feito (o código já diz isso na maioria das vezes)

No corpo do commit, você não precisa escrever coisas como “Remove Classe x”, “Usa biblioteca y”, “Corrige null pointer exception” e assim por diante. Informações assim são visíveis no código e poderiam ser descritas como “Classe x não estava sendo utilizada”, “Optei por usar a biblioteca y por causa de a e b vantagens em relação a biblioteca h”, “O problema acontecia quando o usuário tomava tal ação e blá blá blá”.

Às vezes, você não vai precisar de um commit com corpo, apenas com título. Alguns exemplos de títulos nesse sentido seriam “Remove classe não utilizada b”, “Converte classe y para a linguagem z” (caso você não tenha usado algum recurso da linguagem que ache válido explicar), “Corrige erro no texto b” e assim por diante.

Isso, é treino.

  • é pro CEO (estou considerando que essa pessoa não é técnica) da empresa entender — a abstração é a nível de negócio

Isso vale principalmente pro título, o corpo pode até conter decisões técnicas, mas em alto nível. Esse ponto até hoje é um pouco confuso pra mim, eu não entendia que palavras como “crash”, “class”, “method” e “subscribe” tem espaço no body. Você pode por exemplo descrever decisões arquiteturais.

Outras coisas que ajudam

  • “taggear” os commits
  • linkar os commits com urls com materiais de auxílio para entendimento do que foi feito (SDKs de eventos, estórias, UI e etc)
  • ter pessoas críticas revisando suas mensagens — nada melhor do que aprender com puxões de orelha!

Espero que o texto tenha ajudado :)

Caso possua dúvidas ou algo a acrescentar, fique à vontade nos comentários.

Siga a tag codelikeagirlBR para ver nossos posts! :D

Quer escrever ou traduzir artigos em português para a Code Like A Girl? Se você já faz parte do time de escritoras(es) da Code Like A Girl basta enviar seu artigo diretamente para nossa publicação. Se você ainda não faz parte do nosso time, envie uma mensagem direta para a conta de twitter CodeLikeAGirlBr. Nós avaliaremos seu artigo e ajudaremos a refiná-lo para publicação.

--

--