Como Remover um Arquivo e Todo Histórico no Git
Em algum momento, remover um arquivo e todo o seu histórico no Git pode se tornar necessário. Isso pode acontecer se você tiver enviado informações sensíveis, como senhas ou credenciais, para um repositório público, ou apenas para eliminar dados desnecessários do controle de versão.
Para excluir um arquivo de todo o histórico do Git, use a ferramenta git-filter-repo, recomendada pelo próprio Git como a forma mais moderna de reescrever o histórico.
Usando git-filter-repo
O git-filter-repo é uma ferramenta poderosa que substitui o filter-branch. Para usá-la, primeiro instale o git-filter-repo:
- Instalação do git-filter-repo:
pip install git-filter-repo
- Removendo um arquivo do histórico:
git filter-repo --path <caminho-do-arquivo> --invert-paths
Substitua pelo caminho do arquivo que deseja remover. Por exemplo, para remover segredos.txt do histórico do Git:
git filter-repo --path segredos.txt --invert-paths
Atualizando o repositório remoto
Após reescrever o histórico local, você precisa forçar a atualização do repositório remoto. Este é um passo crítico para garantir que o arquivo removido não esteja mais acessível no histórico do repositório remoto:
git push origin --force --all
git push origin --force --tags
Atenção: O uso de --force
pode sobrescrever o histórico remoto. Certifique-se de comunicar essa mudança a todos os colaboradores do projeto, pois isso pode causar conflitos se eles tiverem cópias locais desatualizadas.
Considerações Finais
- Backup: Antes de realizar qualquer operação de reescrita de histórico, faça um backup do repositório.
- Coordenação: Informe os colaboradores do projeto sobre as mudanças que serão feitas.
- Verificação: Verifique se o arquivo foi completamente removido do histórico utilizando comandos como
git log
egit reflog
.
Conclusão
O git-filter-repo simplifica a remoção de arquivos do histórico do Git, garantindo a eliminação de informações sensíveis ou desnecessárias. Incorpore essa ferramenta ao seu fluxo de trabalho para manter seu repositório seguro e limpo.