Como alterar seu nome e email em TODOS os commits de um repositório
Tags: braziliandevs, womenintech, git, trans
Published: 2022-04-03 05:28:51

## Isso é possível?

Sim, é possível alterar informações de *commits*, como o nome e o email da pessoa autora, sem perder dados ou deixar rastros que essa mudança ocorreu.

Essa possibilidade vem principalmente para pessoas transgênero que desejam mudar os registros de contribuições de seus repositórios, removendo o nome e email morto.

## git-filter-repo

[git-filter-repo](https://github.com/newren/git-filter-repo/) é um *script* que já vem junto com o git. Com esse *script* podemos reescrever o histórico de *commits*, como as informações de pessoas autoras de *commits*.   

## Utilizando o git-filter-repo para alterar informações

Para fazer essa alteração, podemos utilizar o comando abaixo:

```sh
git filter-branch --env-filter '
EMAIL_ANTIGO="seu-email-antigo@example.com"
NOME_CORRETO="Nome correto"
EMAIL_CORRETO="seu-email-correto@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$EMAIL_ANTIGO" ]
then
    export GIT_COMMITTER_NAME="$NOME_CORRETO"
    export GIT_COMMITTER_EMAIL="$EMAIL_CORRETO"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$EMAIL_ANTIGO" ]
then
    export GIT_AUTHOR_NAME="$NOME_CORRETO"
    export GIT_AUTHOR_EMAIL="$EMAIL_CORRETO"
fi
' --tag-name-filter cat -- --branches --tags
```

Basicamente o comando acima utiliza o `git filter-branch` para alterar a árvore de commits com a seguinte regra:

> Todo commit que tiver o email antigo, terá a informação de sua pessoa autora alterada. Substituindo o nome e email antigo, pelo nome e email novo.

Logo, para executar esse comando corretamente, mude as três variáveis de cima, sendo:

- `EMAIL_ANTIGO` pelo seu email antigo;
- `NOME_CORRETO` pelo seu nome correto;
- `EMAIL_CORRETO` pelo seu email correto

Após isso, execute o comando `git log` para ver se a lista de *commits* está com as informações corretas como no exemplo abaixo:

![exemplo de git log com nome e email corretos](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i1i10rpubylns7k5kcg2.png)

## Levando essas alterações ao repositório remoto

Por enquanto, fizemos essas alterações no nosso repositório local, e precisamos passar essas mudanças para o repositório remoto.

**Caso você tenha permissão para `push`**, você pode utilizar `git push -f`, forçando a alteração dessas mudanças.

> Enfatizando: Você precisa ter permissão de push para fazer essas alterações, e caso tenham outras pessoas mexendo no projeto, elas vão precisar utilizar `git pull --rebase` para que todas as alterações relacionadas á branches e informações relacionadas ás pessoas autoras de commits.

Caso tudo dê certo, você irá conseguir ver essas mudanças no seu repositório no Github, Gitlab, Bitbucket,etc. como no exemplo abaixo:

![Exemplo da árvore de commits correta no Github](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ahmgvj6nedp3p5p8sx4i.png)

E pronto! Agora suas informações estão corretas na árvore de *commits* do repositório! 

> Caso dê algum erro em alguma parte, por favor, comentar no artigo sobre o seu erro para que eu possa te ajudar ❤️

## Finalização

Neste artigo, você aprendeu como alterar suas informações em todos os *commits* de um repositório, e levar essas alterações ao repositório remoto. 

Muito obrigada por ler ❤️🏳️‍⚧️ e me segue nas redes, é tudo [@lissatransborda](https://twitter.com/lissatransborda) 👀