Como modificar mensagens de commit no git

Escrever mensagens de commit é uma arte.
Em alguns lugares você deve escrever em inglês, outros deve seguir algum padrão no estilo conventional commits, etc.

Mas não importa qual o estilo que você commita, alguma hora você vai querer mudar a mensagem.
Seja por um erro ortográfico, porquê você escreveu português ao invés de inglês, enfim.
Abaixo mostro alguns jeitos de mudar a mensagem de commit do git.

Para escrever esse texto usei como cobaia o repositório do meu metrônomo para Android.

Vamos ver o ‘git log’ dele:

commit 696c21542b6f5ed3f0802d0af947d1b3d31b17b5
Author: Josiel Santos <meu@email.net>
Date:   Sun Dec 5 09:27:57 2021 -0300

    Alterada vers+úo gradle

commit 02812b7d0fe80506782332ccb85569e35c72f749
Author: Josiel Santos <meu@email.net>
Date:   Sun Dec 5 09:20:43 2021 -0300

    Altera+º+Áes gradle

commit 5e1e8542932e441917492d5560d84d73d3777eb9
Author: Josiel Santos <meu@email.net>
Date:   Sun Dec 5 08:57:22 2021 -0300

    Removido bin+írio compliado

Mudando a mensagem do último commit

Bom, como você deve ter percebido no log acima, os acentos estão estranhos. Então vou mudar o último commit para inglês.

Para mudar a mensagem do último commit, basta usar o mesmo comando git commit, com a flag --amend.

$ git commit --amend -m "Changed Gradle version"
[master 3f11445] Changed Gradle version
 Date: Sun Dec 5 09:27:57 2021 -0300
 1 file changed, 1 insertion(+), 1 deletion(-)

Ok, mudamos localmente… Mas no remoto ainda está a mensagem antiga…
Se você fizer simplesmente “git push” não vai funcionar, pois reescrevemos o histórico do repositório. Para forçar a reescrita, fazemos “git push -f”.

$ git push -f
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 416 bytes | 208.00 KiB/s, done.
Total 5 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
To github.com:JosielSantos/android-metronome
 + 696c215...3f11445 master -> master (forced update)

ATENÇÃO, POR FAVOR! Não reescreva o histórico do repositório quando outras pessoas estiverem trabalhando na mesma branch que você; Isso pode sobrescrever commit dos amiguinhos!

Modificando uma ou mais mensagens, inclusive as mais antigas

Agora vamos usar o poderoso “git rebase”, de forma interativa, para modificar mensagens mais antigas, ou mais de uma mensagem.

Repare na mensagem do terceiro commit ali no log:

commit 5e1e8542932e441917492d5560d84d73d3777eb9
Author: Josiel Santos <meu@email.net>
Date:   Sun Dec 5 08:57:22 2021 -0300

    Removido bin+írio compliado

Além do acento não estar em dia, também temos um errinho de digitação, “compliado”, ao invés de “compilado”.

Para mexer no terceiro commit, vamos pedir para o git os três últimos commits, com a expressão “HEAD~3”:

$ git rebase -i HEAD~3

Seu editor padrão configurado no Git será aberto com um textão, onde devemos dar “instruções” para o git:

pick 5e1e854 Removido bin?rio compliado
pick 02812b7 Altera??es gradle
pick 3f11445 Changed Gradle version

Vamos entender esse arquivinho:

  • Primeira coluna: Comando para o git (pick)
  • Segunda coluna: hash do commit
  • Terceira coluna: mensagem do commit

Depois dessas linhas, o git adiciona também alguns comentários com um “help” de como usar os comandos.
O comando que nos interessa é o “reword”: “r, reword = use commit, but edit the commit message”.

Nesse caso, vamos alterar a linha do “compliado”:

reword 5e1e854 Removido bin?rio compliado
pick 02812b7 Altera??es gradle
pick 3f11445 Changed Gradle version

Salve o arquivo.

Depois de salvo, o git irá começar a abrir editores para você editar as novas mensagens; uma por vez. A cada arquivo que você modificar, você salva.
Nesse caso apenas um editor foi aberto e o git aplicou o rebase.

$ git log
commit fd8ecc3bed2b0842105ee49b65326933826b794f (HEAD -> master)
Author: Josiel Santos <meu@email.net>
Date:   Sun Dec 5 09:27:57 2021 -0300

    Changed Gradle version

commit 7baed070a5e94060777e75d2a5c928dcf5f9ac6a
Author: Josiel Santos <meu@email.net>
Date:   Sun Dec 5 09:20:43 2021 -0300

    Altera<C3><A7><C3><B5>es gradle

commit 8b1873188b338ad64ab2dda616671000b8b0dd46
Author: Josiel Santos <meu@email.net>
Date:   Sun Dec 5 08:57:22 2021 -0300

    Removed the compiled binary

Conferiu o log? Está trabalhando numa branch sozinho? Dalhe empurrar as alterações: git push -f.

ATENÇÃO, POR FAVOR! Não reescreva o histórico do repositório quando outras pessoas estiverem trabalhando na mesma branch que você; Isso pode sobrescrever commit dos amiguinhos!

Fim

Bom, é isso.
Essa era a lição de hoje. Legal é que agora eu não esqueço mais quando precisar. 🙂

Qualquer crítica, elogio ou esculhambação… Comment here!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *