Pular para o conteúdo principal

GIT - Excluir do git um arquivo/diretório do histórico.

[[toc]]

Exclusão de arquivo localmente

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch caminho/do/arquivo/arquivo.extensao" --prune-empty --tag-name-filter cat -- --all
  • Detalhamento das opções utilizadas:

filter-branch: permite reescrever histórico das branches do git

--force: força o filter-branch a ser executado

--index-filter: opção de filtro para reescrita do índice. Normalmente é utilizado em conjunto com "git rm --cached --ignore-unmatch ...". Serve para apagar o histórico de um arquivo, independente de quando ele surgiu

--prune-empty: o filtro pode acabar gerando commits sem alteração, caso somente esse arquivo tenha sido alterado. Essa opção faz com esses commits sejam apagado também

--tag-name-filter cat: atualiza também as tags

-- --all: repo de branches a serem reescritas. No caso de --all, todas as branches serão consideradas e necessita do -- antes como separação dos parâmetros do filter-branch

caminho/do/arquivo/arquivo.extensao: caminho completo até o arquivo que deseja excluir (inclusive o nome e extensão). Caso queira excluir completamente o arquivo, é necessário executar o mesmo comando para qualquer outro caminho onde ele tenha existido (rename, mudança de diretório, etc).


Exclusão de diretório localmente

git filter-branch --force --index-filter "git rm -r --cached --ignore-unmatch caminho/do/diretorio" --prune-empty --tag-name-filter cat -- --all
  • Detalhamento das opções utilizadas:

-r: exclui recursivamente

caminho/do/diretorio: caminho completo até o diretório que deseja excluir. Caso queira excluir completamente o diretório, é necessário executar o mesmo comando para qualquer outro caminho onde ele tenha existido (rename, mudança de diretório, etc).


Envio das alterações para todas as branches

git push origin --force –all
  • Detalhamento das opções utilizadas:

--force: força o push --all: realizado em todas as branches


Envio das alterações para todas as tags

git push origin --force –tags
  • Detalhamento das opções utilizadas:

--force: força o push --all: realizado em todas as branches


Atualização do repositório após a remoção

git pull –rebase
  • Detalhamento das opções utilizadas:

--rebase: realiza o rebase ao invés do merge. Necessário para não apresentar os arquivos como untracked novamente