Git: Corrija o autor dos commits

O git tem uma característica que pode ser um problema se o programador não prestar atenção ao clonar e enviar seus primeiros commits para repositórios quando ele trabalha em projetos diferentes, que é esquecer de alterar o autor e e-mail usado no repositório.

Mas para entender o que ocorre e buscar uma solução, vamos simular uma situação a seguir:

Imagine que eu trabalho em mais de uma projeto, e que ao clonar o primeiro eu defini as configurações globais de nome do autor e e-mail corretas do primeiro projeto. Fiz algumas alteração, e envio meu commit. Até ai, tudo bem.

Se eu conferir meu log, vai estar lá o commit, com o nome de usuário e e-mail corretos.

Agora eu mudei de projeto, e estou trabalhando em outro código, onde meu e-mail mudou, eu clono o novo repositorio, usando o novo usuário e senha, e começo a trabalhar, enviando alguns commits, quando eu vou ver o log, percebo que dei push com o usuário global do outro repositório.

E agora? como consertar esta bagunça, pois meu e-mail neste projeto é tiago@timeq.me.

Acredite, tive este problema ao usar o comando amend, que inclui as alterações no último commit, só não havia percebido que o ultimo commit não era meu, passei mais de uma mês commitando no usuário do meu colega.

Vamos primeiro explicar qual foi o meu primeiro erro: eu devo configurar estes dados por repositório e não global, e admito que esqueço muitas vezes! Então  vamos consertar isto primeiro, definindo o usuário e e-mail sem o parâmetro –global.

Vamos enviar um novo commit e conferir o log.

Finalmente! Nosso git está versionando com o usuário correto, mas ainda temos um problema, os dois commits enteriores não mudaram, ou seja, somente os commits futuros serão armazenados de forma correta. Mas sem pânico! temos a solução para isto, e ela vem em forma de uma comando complicado, mas milagroso! Digite no bash a instrução abaixo, informando o e-mail antigo em OLD_EMAIL e os novos usuários e e-mails em CORRECT_EMAIL:

Após digitar ou copiar o comando, os commits serão reescritos, esta operação pode levar bastante tempo, dependendo do tamanho do repositório.

Ao conferir o log, veremos que os commits foram corrigidos.

Será preciso forçar forçar um push:

Algumas recomendações

  1. Precisa ser em uma branch desprotegida,
  2. Faça esta alterações depois que todos tenha enviado suas alterações, e em um horário onde ninguém esteja usando o repositório.
  3. Se possível, faça um backup dos repositórios.

Deixe uma resposta

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