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 é 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:
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:
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:
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 👀
Top comments (2)
Este artigo é relevante demais, ainda mais porque é raro vermos artigos aqui no dev.to que se importem com essa realidade.
Talvez desse pra fazer uma versão dele em inglês também já que isso pode aumentar bastante o alcance do conteúdo aqui na plataforma (posso ajudar a traduzir se quiser).
Dá pra fazer mesmo, só fico em dúvida sobre como eu poderia divulgar esse artigo pra um público estrangeiro que poderia o consumir. Mas quando eu for traduzir eu te chamo sim Lele