Se você adicionou um arquivo sensível no seu repositório Git, como um arquivo de banco de dados, e deseja removê-lo completamente, incluindo do histórico, este guia explica como fazer isso de forma segura.
Quando um arquivo é adicionado e comitado no Git, ele fica registrado no histórico. Mesmo que depois você o coloque no .gitignore
, os commits anteriores continuam contendo o arquivo, e qualquer pessoa pode acessá-lo se clonar o repositório.
Para remover qualquer traço do arquivo no histórico, é necessário reescrever esse histórico.
git filter-repo
é a ferramenta recomendada atualmente para esse tipo de operação, pois é mais rápida e segura que as alternativas antigas.
- Instale o
git-filter-repo
(caso ainda não tenha):
pip install git-filter-repo
- No diretório raiz do seu repositório, rode o seguinte comando, substituindo
caminho/do/seu_arquivo.db
pelo caminho exato do arquivo que deseja remover:
git filter-repo --invert-paths --path caminho/do/seu_arquivo.db
- Depois que o processo terminar, será necessário forçar o envio das alterações para o repositório remoto:
git push origin --force --all
git push origin --force --tags
- Limpe os dados antigos do Git localmente:
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now --aggressive
- Este processo reescreve o histórico do repositório! Todos que colaboram precisarão re-clonar ou sincronizar cuidadosamente para evitar conflitos.
- Sempre faça backup do seu repositório antes de executar operações que reescrevem o histórico.
- Certifique-se de que o arquivo indesejado esteja listado no
.gitignore
para evitar que ele seja adicionado novamente. - Se preferir uma ferramenta gráfica, pode usar o BFG Repo-Cleaner.
Se não quiser usar o git filter-repo
, pode usar o filter-branch
do Git, embora seja mais lento e propenso a erros:
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch caminho/do/seu_arquivo.db" --prune-empty --tag-name-filter cat -- --all
Depois, force o push:
git push origin --force --all
git push origin --force --tags
Com esses passos, você garante que o arquivo será removido de todo o histórico do repositório e não ficará mais acessível, protegendo informações sensíveis.