Última atualização:
Como renomear commits no GIT
Como renomear commits no GIT

GIT: Como renomear mensagens de commit em um repositório

Nawarian
Nawarian git

As vezes a gente passa tanto tempo escrevendo um código que na hora de fazer o commit vem aquela sensação de alívio e a gente chega até escreve a mensagem de commit errado, né? 🤣

Neste mini tutorial eu vou te mostrar como você pode renomear o commit anterior usando a opção amend do Git. Se você ainda não sabe nada sobre git, dá uma olhada neste guia básico primeiro que vai ser de imensa ajuda!

Atenção! Só é possível renomear um commit usando a opção --force do comando git push. Isto é perigoso e pode te levar a perder commits que estiverem no servidor mas não estiverem em sua máquina local. Use por sua conta e risco!

Como o tópico pode ficar complicado rapidinho, eu gravei este vídeo pra te ajudar a entender o processo:

Como renomear o último commit do repositório

Para renomear o último commit nós podemos utilizar o comando git commit --amend, que só opera sobre o último commit feito.

Vejamos este git log como exemplo, o repositório tem exatamente 3 commits:

Resultado do comando 'git log' mostrando 3 commits. Todos escritos em inglês.
Resultado do comando 'git log' mostrando 3 commits. Todos escritos em inglês.

O último commit diz feat: add sample map. Vamos supor que eu gostaria de traduzir esta mensagem de commit para português. Eu posso renomear aquele commit com o seguinte comando:

$ git commit --amend -m 'feat: adiciona mapa de exemplo'

Pronto, simples assim! O último commit foi renomeado:

Resultado do comando 'git log' mostrando 3 commits. O último commit agora está em português.
Resultado do comando 'git log' mostrando 3 commits. O último commit agora está em português.

Note que nosso branch agora diz HEAD -> main e não está mais de acordo com o upstream (github, gitlab, bitbucket…). Isto acontece porque ao renomear um commit o histórico GIT é modificado e portanto você só consegue atualizar seu repositório usando o git push com a opção --force.

Para enviar o commit ao servidor, precisamos agora fazer um git push --force:

$ git push origin main --force

Como renomear muitas mensagens de commit

A opção --amend só nos permite renomear a última mensagem de commit do histórico. Se você precisa renomear mensagens mais antigas, ou diversas mensagens de uma vez só, vai precisar utilizar um outro comando chamado rebase.

O git rebase te permite revisitar qualquer porção do seu histórico e modificar como quiser: renomear commits, remover commits, mesclar dois mais mais commits num só…

Para renomear muitas mensagens de commit de uma vez só, vamos rodar o seguinte comando:

$ git rebase -i HEAD~2

Note que a opção -i significa interactive, ou seja: o comando vai aguardar a nossa intervenção pra fazer quaisquer alterações.

O argumento HEAD~2 indica ao git que nós queremos rever 2 commits, a partir do último commit (HEAD). O git então vai abrir seu editor de texto padrão, que no meu caso é o VIM – Se você fica perdidim quando o VIM aparece na sua frente, dá uma olhada neste artigo que eu escrevi sobre como começar com VIM do zero. A tela vai ficar assim:

Tela de edição de commits, resultado do comando 'git rebase -i HEAD~2'.
Tela de edição de commits, resultado do comando 'git rebase -i HEAD~2'.

Bueno, as linhas que começam com pick são commits que seu repositório conhece. Para todas as mensagens de commit que você quiser renomear, basta você trocar a palavra pick por reword.

Commit anterior marcado como 'reword' durante 'git rebase -i HEAD~2'.
Commit anterior marcado como 'reword' durante 'git rebase -i HEAD~2'.

Quando você salvar o arquivo, para cada commit que você decidiu renomear, um editor de texto vai se abrir. Veja:

Tela de edição da mensagem de commit.
Tela de edição da mensagem de commit.

E pronto, desta forma você consegue renomear quantos commits quiser. Não se esqueça de que para enviar estas alterações ao servidor git, seja ele github, gitlab, Bitbucket ou qualquer outro, você precisa fazer um git push --force, porque isto efetivamente altera o histórico do seu repositório.

Comentários