Uma ferramenta poderosa para alterar informações de autor (email e nome) em todo o histórico de um repositório Git, sem perder commits ou histórico.
O Git Author utiliza git-filter-repo para reescrever o histórico de commits, permitindo que você altere o email e nome do autor de todos os commits de uma vez. Isso é especialmente útil quando:
- Você começou commits com um email corporativo e agora usa um pessoal
- Você precisou corrigir o nome ou email em commits passados
- Você está consolidando contas de git
- Você precisar de consistência de autoria no repositório
Aviso Importante: Esta operação é irreversível e modifica todos os commits do repositório. Sempre faça um backup antes!
- Git instalado e configurado (versão 2.0 ou superior)
- Python 3 instalado (versão 3.6 ou superior)
- git-filter-repo instalado via pip
# Instalar Python (se não tiver)
# Download em https://www.python.org/downloads/
# Ou via Chocolatey:
choco install python
# Instalar git-filter-repo
pip install git-filter-repo
# Verificar instalação
git-filter-repo --version# Instalar Python (geralmente já vem instalado)
sudo apt-get update
sudo apt-get install python3 python3-pip
# Instalar git-filter-repo
sudo pip3 install git-filter-repo
# Verificar instalação
git-filter-repo --version# Instalar Python (via Homebrew)
brew install python3
# Instalar git-filter-repo
pip3 install git-filter-repo
# Verificar instalação
git-filter-repo --version-
Encontre a pasta do script Git Author:
# Exemplo de caminho onde o script está localizado C:\Repositorio\Programas\Git-Author
-
Abra o Editor de Variáveis de Ambiente:
- Pressione
Windows + Xe selecione "Sistema" - Clique em "Configurações avançadas do sistema"
- Clique em "Variáveis de Ambiente" (botão no canto inferior direito)
- Sob "Variáveis do usuário", clique em "Novo..."
- Pressione
-
Crie a variável:
- Nome da variável:
GIT_AUTHOR_SCRIPTS - Valor da variável:
C:\Repositorio\Programas\Git-Author
- Nome da variável:
-
Adicione ao PATH:
- Em "Variáveis do sistema", encontre
Pathe clique em "Editar..." - Clique em "Novo" e adicione:
%GIT_AUTHOR_SCRIPTS% - Clique em "OK" em todas as caixas de diálogo
- Em "Variáveis do sistema", encontre
-
Reinicie o PowerShell ou o CMD e teste:
git-author -OldEmail old@email.com -NewEmail user@tooark.com -NewName "Tooark User"
-
Abra o PowerShell como Administrador
-
Edite o perfil do PowerShell:
# Crie ou edite o arquivo de perfil if (!(Test-Path -Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force } notepad $PROFILE
-
Adicione o alias ao arquivo:
# Git Author Script Alias Set-Alias -Name git-author -Value "C:\Repositorio\Programas\Git-Author\git-author.ps1"
-
Salve e feche o editor
-
Reinicie o PowerShell e teste:
git-author -OldEmail old@email.com -NewEmail user@tooark.com -NewName "Tooark User"
-
Copie ou crie link simbólico para um diretório no PATH:
# Opção A: Copiar para ~/.local/bin mkdir -p ~/.local/bin cp ~/Repositorio/Programas/Git-Author/git-author.sh ~/.local/bin/git-author chmod +x ~/.local/bin/git-author # Opção B: Criar link simbólico ln -s ~/Repositorio/Programas/Git-Author/git-author.sh ~/.local/bin/git-author chmod +x ~/.local/bin/git-author
-
Adicione ao PATH se necessário:
- Abra o arquivo
~/.bashrc,~/.zshrcou~/.profile(dependendo do seu shell)
# Adicione esta linha ao final do arquivo export PATH="$HOME/.local/bin:$PATH"
- Abra o arquivo
-
Recarregue o shell:
source ~/.bashrc # ou ~/.zshrc ou ~/.profile
-
Teste:
git-author old@email.com user@tooark.com "Tooark User"
-
Edite seu arquivo de configuração do shell:
# Para Bash nano ~/.bashrc # Para Zsh nano ~/.zshrc
-
Adicione o alias:
alias git-author="~/Repositorio/Programas/Git-Author/git-author.sh"
-
Recarregue o shell:
source ~/.bashrc # ou ~/.zshrc
-
Teste:
git-author old@email.com user@tooark.com "Tooark User"
git-author -OldEmail "old@email.com" -NewEmail "user@tooark.com" -NewName "Tooark User"git-author old@email.com user@tooark.com "Tooark User"Se você não fornecer argumentos, o script usará os valores padrão:
- Old Email:
old@email.com - New Email:
user@tooark.com - New Name:
Tooark User
git-authorgit-author-
Navegue até seu repositório Git:
cd /caminho/para/seu/repositorio -
Execute o script (após configurar no PATH):
# Windows git-author -OldEmail "old@email.com" -NewEmail "user@tooark.com" -NewName "Tooark User" # Linux/macOS git-author old@email.com user@tooark.com "Tooark User"
-
Confirme quando solicitado:
- O script pedirá para confirmar a operação
- Digite 'SIM' (Windows) ou 'YES' (Linux/macOS) para continuar
-
Aguarde a conclusão:
- O script criará um stash se houver mudanças locais
- Executará
git-filter-repopara reescrever o histórico - Mostrará "Processo concluído com sucesso!" ao final
# Windows
PS C:\projetos\meu-repo> git-author -OldEmail "old@email.com" -NewEmail "user@tooark.com" -NewName "Tooark User"
=== Git Rename Tool ===
Old Email : old@email.com
New Email : user@tooark.com
New Name : Tooark User
Do you really want to rewrite the ENTIRE repository history? (Y/n)
Type 'SIM' to continue: SIM
Preparing repository...
Local changes detected. Creating stash 'Git-Author-Commit'...
Stash created successfully: 'Git-Author-Commit'.
Running git-filter-repo...
[Processamento...]
Process completed successfully!# Crie uma cópia completa do repositório
git clone --mirror seu-repositorio seu-repositorio.backupSe você faz push para remotes (GitHub, GitLab, Bitbucket, etc.), após executar o script:
-
O histórico local será reescrito
-
Você precisará fazer force push:
git push origin --force-with-lease # Mais seguro que --force -
Todos os colaboradores precisarão fazer rebase:
# Cada colaborador deve executar no repositório local git rebase origin/main # ou sua branch padrão
Se o script criou um stash antes de executar, você pode recuperá-lo após a conclusão:
git stash pop# Reinstale git-filter-repo
pip install --upgrade git-filter-repo
# Ou em alguns sistemas
pip3 install --upgrade git-filter-repo# Certifique-se de estar dentro de um repositório git
git rev-parse --is-inside-work-tree
# Inicialize o repositório se necessário
git init- Verifique se você tem permissão de escrita no diretório
- Tente abrir a ferramenta como Administrador (Windows)
# Use force-with-lease para ser mais seguro
git push origin main --force-with-lease
# Se ainda não funcionar, sincronize seu remote
git remote update
git merge -s ours origin/main
git push origin main# Você começou com um email pessoal, agora usa corporativo
git-author -OldEmail "old@email.com" -NewEmail "user@tooark.com" -NewName "Tooark User"# Seus commits tinham um apelido, agora quer o nome completo
git-author user@tooark.com user@tooark.com "Tooark User Full Name"# Após configurar no PATH, use em qualquer repositório
cd C:\projetos\projeto1
git-author -OldEmail "old@email.com" -NewEmail "new@email.com" -NewName "Nome"
cd C:\projetos\projeto2
git-author -OldEmail "old@email.com" -NewEmail "new@email.com" -NewName "Nome"-
Sempre faça backup antes de usar
-
Teste em um repositório clone se possível
-
Notifique seus colaboradores antes de fazer force push
-
Use
--force-with-leaseao fazer push, é mais seguro -
Verifique o resultado em alguns commits:
git log --oneline -10 git log -1 --format="%an <%ae>"
Git-Author/
├── git-author.ps1 # Script PowerShell (Windows)
├── git-author.sh # Script Bash (Linux/macOS)
├── README.md # Este arquivo
└── LICENSE # Licença do projeto
Este projeto está licenciado sob a MIT License.
Para questões ou problemas, execute o script com --help ou consulte a seção de Troubleshooting acima.
Última atualização: Abril de 2026 Versão: 1.0 (Multi-plataforma)